Stringstreamを使用して、符号なしのshortを大文字の0で始まる16進表現に変換しようとしています。大文字と0が正しいとは思えません。ここに私が持っているものがあります:
USHORT id = 1127;
std::stringstream ss;
ss << std::showbase << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
std::string result = ss.str();
これにより、プレフィックスの「0x」ベースも大文字になりますが、小文字にする必要があります。また、プレフィックス0xベース(現在は0X)の後の16進値にプレフィックス0が付加されません。たとえば、これは予想される0x0467ではなく0X467を出力するようになります。どうすれば修正できますか?
setw
は、表示されたベースを含むフォーマットされた出力全体の幅を設定します。これが、先頭の0
が表示されない理由です。また、std::showbase
とともにstd::uppercase
を使用する場合、ベースを小文字で表示する方法はありません。解決策は、ベースを手動で挿入してから、残りのマニピュレーターを適用することです。
ss << "0x" << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
これは0x0467
を出力します