Maison > Article > développement back-end > Comment imprimer correctement des variables 8 bits non signées en C ?
Manipulation de variables 8 bits non signées en C
Lorsque vous traitez des variables 8 bits non signées en C, vous pouvez rencontrer des difficultés lorsque vous essayez de imprimez-les correctement en utilisant ostream. Par défaut, ostream interprète ces variables comme char, ce qui entraîne une sortie inattendue.
Comprendre le problème
Unsigned char et uint8_t sont tous deux des types de données représentant des entiers non signés de 8 bits. . Cependant, en C , ostream traite automatiquement ces valeurs comme des caractères, ce qui entraîne une représentation hexadécimale incorrecte. L'extrait de code suivant illustre le problème :
unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hex << a << "; b is " << hex << b << endl;
Le résultat sera :
a is ^@; b is 377
Au lieu du résultat souhaité :
a is 0; b is ff
Résolution le problème
Pour imprimer correctement les variables char non signées au format hexadécimal, vous devez les convertir explicitement en int avant de les imprimer :
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
Cela produira le résultat prévu :
a is 0; b is ff
Si vous souhaitez un remplissage nul en début de sortie, vous pouvez utiliser le code suivant :
#include <iomanip> //... cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
Solutions alternatives
La solution de MartinStettner fournit une méthode alternative pour résoudre le problème :
std::cout << std::hex << static_cast<unsigned int>(a);
Cette méthode évite le besoin d'un casting explicite et fournit une solution plus concise.
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!