は、私が数8のために「0x08に」を得るためにしたいが、私は「%の#の02X」を使用する場合、私は0x8のを取得:なぜprintf形式の "#"の後に幅番号が使えないのですか?
形式に「#」の後に動作しないことができる幅数のように思えるint i = 0x08;
printf("%#02x", i); // only print 0x8, not 0x08
文字列。 "0x%02x"を使用する以外の印刷方法はありますか?
は、私が数8のために「0x08に」を得るためにしたいが、私は「%の#の02X」を使用する場合、私は0x8のを取得:なぜprintf形式の "#"の後に幅番号が使えないのですか?
形式に「#」の後に動作しないことができる幅数のように思えるint i = 0x08;
printf("%#02x", i); // only print 0x8, not 0x08
文字列。 "0x%02x"を使用する以外の印刷方法はありますか?
フィールド幅には、#
で要求される「代替プレフィックス」が含まれます。
したがって、希望の効果を得るにはprintf("%#04x", i);
を使用できます。個人的には、すでに言及した通り"0x%02x"
が好きです。 @Rが推奨する
別の方法として、...、最小精度代わりのフィールド幅を使用することです。整数の場合、精度は接頭辞を除外し、必要に応じて常にゼロ詰めされるため、コードはprintf("%#.2x", i);
になります。
x
などの整数指定の場合、.
の後の数字は最小精度です。長い数値は切り捨てられません。これは、浮動小数点と文字列の動作が.
とは異なります。
私は好みのレイアウトを得るために、通常は '0x%.8X'を使用しています。これは他のどのメカニズムでも達成できません。 –
先頭の '0x'はテキストであり、実際の書式指定で表示されているものとは関係ありません。 – user3629249