2009-10-25 17 views
9

Ich versuche, den Hexadezimalwert eines Zeichens auszugeben und es auf eine nette Weise zu formatieren.C++ hex Zahlenformat

erforderlich: 0x01 : value 0x1

Alles, was ich bekommen kann, ist: 00x1 : value 0x1 // oder 0x1, wenn ich verwenden iomanip nicht

Hier ist der Code ist ich habe, 'ch' erklärt wurde, ein unsigned char zu sein. Gibt es eine andere Möglichkeit, dies zu tun, als den Wert zu überprüfen und manuell eine '0' hinzuzufügen?

cout << showbase; 
cout << hex << setw(2) << setfill('0') << (int) ch; 

Edit:

ich eine Lösung gefunden online:

cout << internal << setw(4) << setfill('0') << hex << (int) ch 

Antwort

13
std::cout << "0x" << std::noshowbase << std::hex << std::setw(2) << std::setfill('0') << (int)ch; 

Da setw Pads aus links von der gesamten gedruckten Nummer (nach showbase angewendet wird), showbase isn In deinem Fall nicht verwendbar. Drucken Sie stattdessen die Basis wie oben gezeigt manuell aus.

0

In einem an meinen Projekten ich dies tat:

ostream &operator<<(ostream &stream, byte value) 
{ 
    stream << "0x" << hex << (int)value; 
    return stream; 
} 

ich surchaged die Bediener < < für Stream-Ausgabe, und alles, was ein Byte war, in hexadezimal dargestellt. Byte ist ein Typdef für unsigned char.