C では、符号なし 8 ビット変数の処理は unsigned char または uint8_t を使用して行うことができます。ただし、ostream を使用してこれらの変数を直接出力すると、これらの変数が文字として解釈され、符号なし整数値を処理するときに見られるような望ましくない結果が生じます。
unsigned char または uint8_t を 16 進値として正確に表示するには、それらを int にキャストする必要があります。 ostream に渡す前に。たとえば、
cout << "a is " << hex << a << "; b is " << hex << b << endl;
の代わりに、
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
を使用します。このアプローチにより、データが整数として扱われ、正しい 16 進表現が得られます。
先頭にゼロを付けたパディングを追加したい場合は、ヘッダー ファイル さらに、このプロセスを簡略化するために、マクロを作成できます: これにより、以下を使用して 16 進値を簡潔に出力できます: ただし、MartinStettner が提案した別のアプローチを検討する価値があります。マニピュレータ std::hex を使用すると、コードが読みやすくなり、キャストの必要がなくなります: 以上がostream を使用して C で unsigned char 値を 16 進数として出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。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 );
cout << "a is " << std::hex << a << "; b is " << std::hex << b << endl;