Manipulation von vorzeichenlosen 8-Bit-Variablen in C
Beim Umgang mit vorzeichenlosen 8-Bit-Variablen in C kann es zu Herausforderungen kommen Drucken Sie sie korrekt mit ostream aus. Standardmäßig interpretiert ostream diese Variablen als char, was zu einer unbeabsichtigten Ausgabe führt.
Verstehen des Problems
Unsigned char und uint8_t sind beide Datentypen, die 8-Bit-Ganzzahlen ohne Vorzeichen darstellen . In C behandelt ostream diese Werte jedoch automatisch als Zeichen, was zu einer falschen Hex-Darstellung führt. Das folgende Code-Snippet veranschaulicht das Problem:
unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hex << a << "; b is " << hex << b << endl;
Die Ausgabe lautet:
a is ^@; b is 377
Anstelle der gewünschten Ausgabe:
a is 0; b is ff
Wird behoben das Problem
Um vorzeichenlose Char-Variablen korrekt als Hex auszugeben, müssen Sie sie explizit umwandeln in int umwandeln, bevor Sie sie drucken:
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
Dadurch wird die beabsichtigte Ausgabe erzeugt:
a is 0; b is ff
Wenn Sie in Ihrer Ausgabe eine Auffüllung mit führenden Nullen wünschen, können Sie den folgenden Code verwenden:
#include <iomanip> //... cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
Alternative Lösungen
Die Lösung von MartinStettner bietet eine alternative Methode dazu Beheben Sie das Problem:
std::cout << std::hex << static_cast<unsigned int>(a);
Diese Methode vermeidet die Notwendigkeit einer expliziten Umwandlung und bietet eine präzisere Lösung.
Das obige ist der detaillierte Inhalt vonWie drucke ich vorzeichenlose 8-Bit-Variablen korrekt in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!