ホームページ >バックエンド開発 >C++ >C で符号なし 8 ビット変数を正しく出力するにはどうすればよいですか?

C で符号なし 8 ビット変数を正しく出力するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-11 01:13:03821ブラウズ

How to Print Unsigned 8-bit Variables Correctly in C  ?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。