Maison > développement back-end > C++ > Comment imprimer correctement des variables 8 bits non signées en C ?

Comment imprimer correctement des variables 8 bits non signées en C ?

DDD
Libérer: 2024-11-11 01:13:03
original
854 Les gens l'ont consulté

How to Print Unsigned 8-bit Variables Correctly in 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;
Copier après la connexion

Le résultat sera :

a is ^@; b is 377
Copier après la connexion

Au lieu du résultat souhaité :

a is 0; b is ff
Copier après la connexion
Copier après la connexion

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;
Copier après la connexion

Cela produira le résultat prévu :

a is 0; b is ff
Copier après la connexion
Copier après la connexion

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 ;
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal