2009-10-25 3 views
9

Tôi đang cố gắng để sản xuất các giá trị hex của một char và định dạng nó theo một cách tốt đẹp.C++ số hex định dạng

Yêu cầu: 0x01 : value 0x1

Tất cả tôi có thể nhận được là: 00x1 : value 0x1 // hoặc 0x1 nếu tôi không sử dụng iomanip

Dưới đây là đoạn code tôi có, 'ch' được tuyên bố là một char unsigned. Có cách nào khác để làm điều đó khác hơn là kiểm tra giá trị và tự thêm một '0' ??

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

Edit:

Tôi tìm thấy một giải pháp trực tuyến:

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

Trả lời

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

Kể từ setw miếng đệm ra bên trái của số điện thoại in tổng thể (sau khi showbase được áp dụng), showbase isn không thể sử dụng trong trường hợp của bạn. Thay vào đó, in thủ công cơ sở như được hiển thị ở trên.

0

Trong một dự án của tôi, tôi đã làm điều này:

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

tôi surchaged các nhà điều hành < < cho đầu ra suối, và bất cứ điều gì đó là một byte đã được thể hiện trong hệ thập lục phân. byte là một typedef cho unsigned char.