с ++ шестнадцатеричный формат - PullRequest
10 голосов
/ 25 октября 2009

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

Обязательно: 0x01 : value 0x1

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

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

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

Edit:

Я нашел одно решение онлайн:

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

Ответы [ 2 ]

13 голосов
/ 25 октября 2009
std::cout << "0x" << std::noshowbase << std::hex << std::setw(2) << std::setfill('0') << (int)ch;

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

0 голосов
/ 25 октября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...