C / C ++ lire un octet à partir d'une entrée standard hexinput
Question
Impossible de trouver un moyen exactement sur la façon de faire ce qui suit en C / C ++.
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 puis-je divisé les 2 octets en valeurs 1bytes uint8_t
(ou peut-être même lu le premier octet seulement). Aimeriez-vous 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 ont seulement 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é.
Edit:. Trouvé même une meilleure méthode en utilisant la fonction fread car il permet un spécifier combien d'octets il faut lire à partir du flux (stdin dans ce cas) et enregistrer à une variable / array
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 (*) comptage d'octets
Taille -. Taille en octets de chaque élément à lire
count -. Le nombre d'éléments, chacun ayant une taille d'octets de taille
courant- pointeur vers un objet de fichier qui spécifie un flux d'entrée.
La solution
%x
lit un unsigned int
, pas un uint16_t
(pensé qu'ils peuvent être les mêmes sur votre plateforme).
Pour lire un seul octet, essayez ceci:
uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;
Ce lit un <=>, mais arrête la lecture de deux caractères (deux caractères hexadécimaux est égal à huit bits, soit un octet).
Autres conseils
Vous devriez être en mesure de diviser la variable comme ceci:
uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;
Quelques pensées:
1) lire sous forme de caractères et convertir manuellement - douloureux
2) Si vous savez qu'il ya un multiple de 4 hexits, vous pouvez lire tout twobytes puis converties en valeurs d'un octet avec haut = twobytes << 8; bas = twobyets & FF;
3)% 2x