質問
文字の16進値を出力し、適切な方法でフォーマットしようとしています。
必須:0x01 : value 0x1
取得できるのは、00x1 : value 0x1
//またはiomanipを使用しない場合は0x1です
ここに私が持っているコードがあります。'ch 'はunsigned charであると宣言されました。値を確認して手動で「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
が適用された後)、<=>は使用できません。代わりに、上記のようにベースを手動で印刷します。
他のヒント
プロジェクトの1つでこれを行いました:
ostream &operator<<(ostream &stream, byte value)
{
stream << "0x" << hex << (int)value;
return stream;
}
私はオペレーターを追撃しました<!> lt; <!> lt;ストリーム出力の場合、バイトであったものはすべて16進数で表示されました。 byteは符号なしcharのtypedefです。
所属していません StackOverflow