ホームページ > バックエンド開発 > C++ > ostream を使用して C で unsigned char 値を 16 進数として出力するにはどうすればよいですか?

ostream を使用して C で unsigned char 値を 16 進数として出力するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-21 11:05:16
オリジナル
306 人が閲覧しました

How do I print unsigned char values as hexadecimal in C   using ostream?

C で Ostream を使用して符号なし Char を 16 進数として出力

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 進表現が得られます。

先頭にゼロを付けたパディングを追加したい場合は、ヘッダー ファイル を含めることができます。次の構文を使用します:

cout << "a is " << setw(2) << setfill('0') << hex << (int) a;
ログイン後にコピー

さらに、このプロセスを簡略化するために、マクロを作成できます:

#define HEX( x )
   setw(2) << setfill('0') << hex << (int)( x )
ログイン後にコピー

これにより、以下を使用して 16 進値を簡潔に出力できます:

cout << "a is " << HEX( a );
ログイン後にコピー

ただし、MartinStettner が提案した別のアプローチを検討する価値があります。マニピュレータ std::hex を使用すると、コードが読みやすくなり、キャストの必要がなくなります:

cout << "a is " << std::hex << a << "; b is " << std::hex << b << endl;
ログイン後にコピー

以上がostream を使用して C で unsigned char 値を 16 進数として出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート