ostream hex Manipulator Problem
-
Hallo Leute,
ich hab ein Problem beim Ausgeben eines char Arrays als hex Werte.
Hier ein kleines "cout"-Beispielprogramm:
char buffer[5]; buffer[0] = 0xa1; buffer[1] = 0x62; buffer[2] = 0x23; buffer[3] = 0x84; buffer[4] = 0xc5; for(size_t i=0; i<5; ++i) { cout << hex << (short)buffer[i] << ':'; }Mein Problem:
Anstatt "a1:62:23:84:c5:" stehen vor einigen hex Angaben "ff". Sieht so aus, als würde beim casten nach short das höhere Byte hin und wieder mit 1...1 gefüllt werden.Wenn ich nicht caste, bekomme ich aber nur die ASCII Darstellung der Werte. Leider gibt es keinen 1 Byte-Integer Wert.
Meine Frage ist also, wie ich eine gültige Ausgabe schaffe?!
Schonmal vielen Dank im voraus...
-
Einige Werte im Array sind grösser als 127, das bedeutet, dass sie signed sind.
unsigned char buffer[5]; buffer[0] = 0xa1; buffer[1] = 0x62; buffer[2] = 0x23; buffer[3] = 0x84; buffer[4] = 0xc5;So sollte es gehen.
-
Klappt wunderbar, dankeschön!
-
Es geht auch ohne Änderung des Buffertyps.
cout << hex; // einmal reicht for(size_t i=0; i<5; ++i) { cout << int( static_cast< unsigned char >( buffer[i] ) ) << ':'; }Gruß
Werner
-
Werner Salomon schrieb:
Es geht auch ohne Änderung des Buffertyps.
cout << hex; // einmal reicht for(size_t i=0; i<5; ++i) { cout << int( static_cast< unsigned char >( buffer[i] ) ) << ':'; }Gruß
WernerLiefert das auch die gewünschte Ausgabe wenn char == unsigned char ist?
-
Frager schrieb:
Liefert das auch die gewünschte Ausgabe wenn char == unsigned char ist?
char ist immer ein anderer Typ als unsigned char ... oder wie darf ich die Frage verstehen? Auch wenn die Typen gleich wären, wäre das Ergebnis das gleiche, aber dann hätte Tobias das Problem gar nicht gehabt.
-
No na.
greetz, Swordfish
-
Werner Salomon schrieb:
char ist immer ein anderer Typ als unsigned char ... oder wie darf ich die Frage verstehen?
Es ist nicht definiert, ob char vorzeichenbehaftet ist. Der Wertebereich kann also über 127 hinausgehen, muss aber nicht (altes C-Erbe, deshalb gibts überhaupt die 3 Typen).
-
pumuckl schrieb:
Werner Salomon schrieb:
char ist immer ein anderer Typ als unsigned char ... oder wie darf ich die Frage verstehen?
Es ist nicht definiert, ob char vorzeichenbehaftet ist. Der Wertebereich kann also über 127 hinausgehen, muss aber nicht (altes C-Erbe, deshalb gibts überhaupt die 3 Typen).
Ich bin mir ganz sicher, dass Werne das weiß. Seine Aussage bleibt auch unabhängig davon richtig. Es spielt keine Rolle ob char signed oder unsigned ist, char ist *garantiert* ein eigenständiger Typ und damit niemals gleich unsigned char. Und wenn es um die Werte geht, die char im Falle signed vs. unsigned repräsentieren kann: Werners Lösung funktioniert selbstverständlich in beiden Fällen.
-
Jop. So steht es im Standard geschrieben: Es gibt die Datentypen char, signed char und unsigned char. Als was char nun gesetzt ist, steht nicht fest(s. Hummes Antwort).