質問

文字の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です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top