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

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

Mary-Kate Olsen
リリース: 2024-11-11 02:56:02
オリジナル
736 人が閲覧しました

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

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