Impression de caractères non signés en hexadécimal en C à l'aide de ostream
En C, l'impression de variables 8 bits non signées directement à l'aide de ostream les traite comme des caractères, ce qui entraîne une représentation hexadécimale inexacte. Pour surmonter ce problème, plusieurs méthodes sont disponibles :
Casting en int
Une approche courante consiste à convertir le caractère non signé en un entier avant l'impression. Cela oblige ostream à traiter la valeur comme un nombre hexadécimal. Par exemple :
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
Utilisation du manipulateur hexadécimal avec int
Vous pouvez également utiliser le manipulateur de flux hexadécimal directement avec un entier. Cela convertira l'entier en représentation hexadécimale et l'ajoutera au flux. Par exemple :
cout << "a is " << hex << int(a) << "; b is " << hex << int(b) << endl;
Utilisation du manipulateur hexadécimal avec setw et setfill
Si vous avez besoin de zéros non significatifs pour le remplissage, vous pouvez combiner le manipulateur hexadécimal avec setw et setfill pour spécifiez la largeur souhaitée et le caractère de remplissage. Par exemple :
#include <iomanip> ... cout << "a is " << setw(2) << setfill('0') << hex << int(a);
Création d'une macro
Vous pouvez simplifier le processus d'impression en créant une macro qui combine les manipulations nécessaires. Par exemple :
#define HEX( x ) setw(2) << setfill('0') << hex << (int)( x )
Avec cette macro, vous pouvez simplement écrire :
cout << "a is " << HEX( a );
La solution de MartinStettner
Une autre solution élégante consiste à créer un outil d'insertion de flux personnalisé pour les caractères non signés qui les imprime automatiquement au format hexadécimal. Veuillez vous référer à la question et à la réponse originales pour plus de détails sur l'approche de MartinStettner.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!