Impossible de trouver exactement comment procéder en C/C++.C/C++ lit un octet à partir d'un hexinput à partir de stdin
Entrée: valeurs hexdecimal, par exemple: FFFFFFFFFF ...
J'ai essayé le code suivant pour lire l'entrée:
uint16_t twoBytes;
scanf("%x",&twoBytes);
Cest fonctionne très bien et tout, mais comment J'ai divisé les 2bytes en 1bytes uint8_t
valeurs (ou peut-être même lire le premier octet seulement). Voudrait lire le premier octet de l'entrée, et le stocker dans une matrice d'octets dans une position de choix.
uint8_t matrix[50][50]
Depuis que je ne suis pas très habile dans formating/lecture de l'entrée en C/C++ (et ne l'ai utilisé scanf jusqu'à présent) d'autres idées sur la façon de le faire facilement (et rapidement si elle va) est très appréciée . Edit: Trouvé encore une meilleure méthode en utilisant la fonction fread car elle permet de spécifier combien d'octets il devrait lire dans le flux (stdin dans ce cas) et enregistrer dans une variable/tableau.
size_t fread (void * ptr, size_t size, size_t count, FILE * stream);
Paramètres
ptr - pointeur vers un bloc de mémoire d'une taille minimale de la taille (count *) octets.
size - Taille en octets de chaque élément à lire.
count - Nombre d'éléments, chacun d'une taille d'octets taille. Stream - Pointeur vers un objet FILE qui spécifie un flux d'entrée.
Cela fonctionnera probablement sur une machine little-endian, mais cela ne fonctionnera pas sur une machine big-endian. Vous voulez utiliser "% hhx" à la place. –
@Rosenfield, Ah, j'ai oublié cela en écrivant ma réponse (mais je l'ai considéré en y pensant). De plus, le modificateur hh n'est pas standard (spécifique à GCC). – strager
Je ne pense toujours pas que l'endianisme soit un problème. Lorsque vous faites toutes ces opérations, le compilateur est assez intelligent pour traiter byteTmp comme un seul nombre, pas comme 4 octets, donc quand vous lisez dedans, vous obtenez un nombre de 1 octet mis dans une valeur de 4 octets, ça va bien. Quand vous lancez, il prend les bons bits. –