2009-10-25 11 views
9

Próbuję wypisać wartość szesnastkową znaku i sformatować go w przyjemny sposób.C++ format liczby szesnastkowej

Wymagane: 0x01 : value 0x1

Wszystko, co mogę dostać to: 00x1 : value 0x1 // lub 0x1 jeśli nie używam iomanip

Oto kod mam, 'ch' został uznany za unsigned char. Czy jest jakiś inny sposób na to, poza sprawdzeniem wartości i ręcznym dodaniem '0' ??

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

Edit:

znalazłem jeden w internecie rozwiązanie:

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

Odpowiedz

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

Rejestracja setw klocki na zewnątrz do lewej ogólnej liczby drukowanych (po showbase jest stosowany), showbase ISN w twoim przypadku jest użyteczny. Zamiast tego ręcznie wydrukuj bazę, jak pokazano powyżej.

0

W jednym z moich projektów Zrobiłem to:

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

I surchaged operatora < < dla wyjścia strumienia, a wszystko to było bajt został pokazany w systemie szesnastkowym. bajt to typedef dla znaku unsigned char.