Impression de caractères non signés en hexadécimal en C à l'aide d'Ostream
Pour imprimer des variables non signées de 8 bits (unsigned char ou uint8_t) en hexadécimal à l'aide d'ostream en C , envisagez les solutions suivantes :
Utiliser Casting avec le manipulateur hexadécimal
Vous pouvez utiliser un cast pour convertir le caractère non signé en entier avant d'utiliser le manipulateur hexadécimal :
cout << "a is " << hex << (int)a << "; b is " << hex << (int)b << endl;
Utilisation du manipulateur personnalisé
MartinStettner a fourni un élégant manipulateur personnalisé appelé hexchar qui simplifie l'hexagone impression :
#include <iostream> #include <iomanip> namespace std { template<> ostream& operator<<(ostream& os, unsigned char c) { return os << setbase(16) << setfill('0') << setw(2) << (unsigned int)c; } } using namespace std; int main() { unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hexchar << a << "; b is " << hexchar << b << endl; return 0; }
Cela produira le résultat souhaité :
a is 00; b is ff
Utilisation d'une macro (moins préférée)
Comme alternative, vous peut définir une macro pour automatiser le processus, bien que ce soit moins idiomatique en C :
#define HEX(x) \ setw(2) << setfill('0') << hex << (unsigned int)(x) int main() { unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << HEX(a) << "; b is " << HEX(b) << endl; return 0; }
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!