ostream を使用した C での符号なし文字の 16 進数としての出力
C では、ostream を使用して符号なし 8 ビット変数を直接出力すると、それらは文字として扱われます。その結果、16 進数表現が不正確になります。これを解決するために、いくつかの方法が利用可能です。
int へのキャスト
一般的なアプローチの 1 つは、印刷前に unsigned char を整数にキャストすることです。これにより、ostream は値を 16 進数として扱うようになります。例:
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
int で 16 進数マニピュレータを使用する
あるいは、16 進数ストリーム マニピュレータを整数で直接使用することもできます。これにより、整数が 16 進表現に変換され、ストリームに追加されます。例:
cout << "a is " << hex << int(a) << "; b is " << hex << int(b) << endl;
setw および setfill で 16 進数マニピュレータを使用する
パディングに先行ゼロが必要な場合は、16 進数マニピュレータと setw および setfill を組み合わせることができます。希望の幅と塗りつぶし文字を指定します。例:
#include <iomanip> ... cout << "a is " << setw(2) << setfill('0') << hex << int(a);
マクロの作成
必要な манипуляции を組み合わせたマクロを作成すると、印刷プロセスを簡素化できます。例:
#define HEX( x ) setw(2) << setfill('0') << hex << (int)( x )
このマクロを使用すると、次のように簡単に書くことができます:
cout << "a is " << HEX( a );
MartinStettner のソリューション
もう 1 つのエレガントなソリューションは、 unsigned char を 16 進数として自動的に出力するカスタム ストリーム インサータ。 MartinStettner のアプローチの詳細については、元の質問と回答を参照してください。
以上がostreamを使用してCで符号なし文字を16進数として出力する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。