Comment convertir Hex Ascii en C avec et sans utilisation de sprintf?
J'ai utilisé strtol pour convertir une chaîne en hexadécimal, maintenant, j'ai besoin de l'imprimer à l'écran. Je ne suis pas sûr si je peux utiliser sprintf puisque je n'ai que 20 k de mémoire à utiliser sur ce forum. Alternatives de bienvenue.
Puis convertir un octet en 2 caractères hex -- en supposant que unsigned char est la meilleure représentation pour un octet, mais sans faire des hypothèses au sujet de sa taille -- extrait de chaque nybble et obtenir le char:
void get_byte_hex(unsignedchar b,char*ch1,char*ch2 ){*ch1 = nybble_chars[( b >>4)&0x0F];*ch2 = nybble_chars[ b &0x0F];}
Cela s'étend carrément à plus large de types de données, et devrait générer raisonnablement code concis à travers une large gamme d'architectures.
+1 si vous ajoutez chars[2] = '\0' (et certains espaces ne pouvait pas faire de mal à votre code.) Mise à jour du code pour le rendre plus clair ce qui se passe.
De le faire manuellement, le plus simple est d'avoir une table de mappage nybbles ASCII:
Puis convertir un octet en 2 caractères hex -- en supposant que
unsigned char
est la meilleure représentation pour un octet, mais sans faire des hypothèses au sujet de sa taille -- extrait de chaque nybble et obtenir le char:Cela s'étend carrément à plus large de types de données, et devrait générer raisonnablement code concis à travers une large gamme d'architectures.
chars[2] = '\0'
(et certains espaces ne pouvait pas faire de mal à votre code.)Mise à jour du code pour le rendre plus clair ce qui se passe.
OriginalL'auteur
Découvrez Codes De Mise En Forme, si votre C mise en œuvre prend en charge, il devrait être facile pour imprimer les valeurs en hexadécimal.
OriginalL'auteur Gabriel Ščerbák
Vérifier votre bibliothèque C pour
ltoa
-- l'inverse destrtol
. Ou, de l'écrire à partir de zéro (voir brone de réponse).OriginalL'auteur tomlogic