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.

Cplusplus ref

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top