Maison  >  Article  >  développement back-end  >  Comment imprimer des caractères non signés au format hexadécimal en C à l'aide d'ostream ?

Comment imprimer des caractères non signés au format hexadécimal en C à l'aide d'ostream ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-11 02:56:02670parcourir

How to Print Unsigned Chars as Hexadecimal in C   Using ostream?

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!

Déclaration:
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