ホームページ > バックエンド開発 > C++ > printf を使用して 1 バイトの 16 進値を正確に出力するにはどうすればよいですか?

printf を使用して 1 バイトの 16 進値を正確に出力するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-16 18:08:13
オリジナル
692 人が閲覧しました

How Can I Accurately Print Hexadecimal Values of Single Bytes Using printf?

printf: 16 進値を正確に出力する

文字のベクトルを扱う場合、個々のバイトを 16 進数で出力するときに不一致が発生することがよくあります。 printfを使ってフォーマットします。この問題は、単一の char (1 バイトのみ) を出力しようとしたときに発生しますが、代わりにマルチバイト値を取得します。

この動作の背後にある理由は、printf の型マッチングにあります。 %x 修飾子は unsigned int パラメーターを予期しており、通常、char は可変引数関数に渡されるときに int にプロモートされます。このプロモーションにより、単一の char 値を出力するときに不正確な結果が生じる可能性があります。

この問題を解決するには、char を unsigned int に明示的にキャストして、予測可能な結果を​​保証する必要があります。たとえば、次のコードは 1 バイトを正確に出力します:

printf(" 0x%1x ", (unsigned)pixel_data[0]);
ログイン後にコピー

フィールド幅 1 は、単に最小桁数を指定するだけであるため、このコンテキストでは特に有用ではないことに注意することが重要です。表示します。ただし、バイト値を符号なし値として扱い、unsigned int に変換するときにゼロ拡張したい場合は、ベクトルに unsigned char を使用するか、特定のキャストを実行できます。

printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
ログイン後にコピー

または、次のようにすることもできます。同じ結果を達成するには、昇格後にマスキング操作を適用します。

printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
ログイン後にコピー

これらの手法に従うことで、printf が正確に実行されることを保証できます。単一バイトを扱う場合でも、16 進値を出力します。

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

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