ホームページ  >  記事  >  バックエンド開発  >  ostreamを使用してCで符号なし文字を16進数として出力する方法は?

ostreamを使用してCで符号なし文字を16進数として出力する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-11 02:56:02672ブラウズ

How to Print Unsigned Chars as Hexadecimal in C   Using ostream?

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

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