Я должен напечатать на стандартном выходе некоторые значения std::uint16_t
как шестнадцатеричные со следующим форматированием текста: 0x##
. Я нашел этот код в Интернете, который работает отлично подходит для каждого значения, кроме 0
:std :: cout of hexadecimal 0x00
std::cout << std::internal
<< std::setfill('0')
<< std::hex
<< std::showbase
<< std::setw(4)
<< value << std::endl;
По какой-то причине я не понимаю, 0
печатается как 0000
. Все остальные значения правильно напечатаны, как ожидалось.
Как видно в [разделе Notes здесь] (http://en.cppreference.com/w/cpp/io/manip/showbase #Notes), это был преднамеренный выбор. Как обойти это? Не уверен, боюсь, никогда не понадобилось. Похоже, вам может понадобиться создать свой собственный ['num_put'] (http://en.cppreference.com/w/cpp/locale/num_put), который является болью в пресловутых. – BoBTFish
_One вопрос за вопрос please._ –
Я уверен, что программист разработал эту систему («Нуль одинаково на каждой базе, в чем проблема?»). Я думаю, что '... <<" 0x "<< setw (2) << ...' должен работать. – molbdnilo