Вопрос

Я пытаюсь вывести шестнадцатеричное значение символа char и отформатировать его удобным способом.

Требуемый: 0x01 : value 0x1

Все, что я могу получить, это: 00x1 : value 0x1 // или 0x1, если я не использую iomanip

Вот код, который у меня есть, 'ch' был объявлен как символ без знака.Есть ли какой-либо другой способ сделать это, кроме проверки значения и ручного добавления '0'??

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

Редактировать:

Я нашел одно решение в Интернете:

cout << internal << setw(4) << setfill('0') << hex << (int) ch
Это было полезно?

Решение

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

С тех пор как setw отступы слева от общего напечатанного номера (после showbase применяется), showbase в вашем случае это невозможно использовать.Вместо этого распечатайте основу вручную, как показано выше.

Другие советы

В одном из моих проектов я сделал это:

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

Я переплатил оператору<< для вывода потока, и все, что было байтом, было показано в шестнадцатеричном формате.byte - это typedef для символа без знака.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top