C での符号なし 8 ビット変数の操作
C で符号なし 8 ビット変数を扱う場合、次のような問題が発生する可能性があります。 ostream を使用して正しく印刷してください。デフォルトでは、ostream はこれらの変数を char として解釈し、意図しない出力が発生します。
問題の理解
Unsigned char と uint8_t は両方とも 8 ビット符号なし整数を表すデータ型です。ただし、C では、 ostream がこれらの値を自動的に文字として扱うため、16 進表現が正しくなくなります。次のコード スニペットは問題を示しています:
unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hex << a << "; b is " << hex << b << endl;
出力は次のようになります:
a is ^@; b is 377
目的の出力の代わりに:
a is 0; b is ff
解決問題
unsigned char 変数を次のように正しく出力するには16 進数の場合は、出力する前に明示的に int にキャストする必要があります:
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
これにより、意図した出力が生成されます:
a is 0; b is ff
出力で先行ゼロのパディングが必要な場合は、次のコードを使用できます:
#include <iomanip> //... cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
代替解決策
MartinStettner の解決策は、この問題を解決するための代替方法を提供します。
std::cout << std::hex << static_cast<unsigned int>(a);
この方法は、明示的なキャストの必要性を回避し、より簡潔な解決策を提供します。
以上がC で符号なし 8 ビット変数を正しく出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。