Comment sortir un caractère sous forme d’entier par cout?

#include  using namespace std; int main() { char c1 = 0xab; signed char c2 = 0xcd; unsigned char c3 = 0xef; cout << hex; cout << c1 << endl; cout << c2 << endl; cout << c3 << endl; } 

Je m’attendais à ce que la sortie soit comme suit:

 ab cd ef 

Pourtant, je n’ai rien eu.

Je suppose que c’est parce que cout traite toujours «char», «signé char» et «unsigned char» comme des caractères plutôt que comme des entiers de 8 bits. Cependant, «char», «signé char» et «unsigned char» sont tous des types intégraux.

Donc, ma question est la suivante: comment générer un caractère sous la forme d’un entier via cout?

PS: static_cast (…) est laid et nécessite plus de travail pour découper des bits supplémentaires.

 char a = 0xab; cout << +a; // promotes a to a type printable as a number, regardless of type. 

Cela fonctionne tant que le type fournit un opérateur unaire + avec une sémantique ordinaire. Si vous définissez une classe qui représente un nombre, pour fournir un opérateur unaire + avec une sémantique canonique, créez un operator+() qui renvoie simplement *this soit par valeur, soit par référence à const.

source: Parashift.com - Comment puis-je imprimer un caractère en tant que nombre? Comment puis-je imprimer un caractère * pour que la sortie affiche la valeur numérique du pointeur?

Convertissez-les en un type entier (et masquez-les de manière appropriée!), C’est-à-dire:

 #include  using namespace std; int main() { char c1 = 0xab; signed char c2 = 0xcd; unsigned char c3 = 0xef; cout << hex; cout << (static_cast(c1) & 0xFF) << endl; cout << (static_cast(c2) & 0xFF) << endl; cout << (static_cast(c3) & 0xFF) << endl; } 

Peut être ça:

 char c = 0xab; std::cout << (int)c; 

J'espère que cela aide.

Une autre façon de le faire est d’utiliser std :: hex en dehors de casting (int) :

 std::cout << std::hex << (int)myVar << std::endl; 

J'espère que ça aide.