2016-10-11 9 views
3

は、私が数8のために「0x08に」を得るためにしたいが、私は「%の#の02X」を使用する場合、私は0x8のを取得:なぜprintf形式の "#"の後に幅番号が使えないのですか?

形式に「#」の後に動作しないことができる幅数のように思える
int i = 0x08; 
printf("%#02x", i); // only print 0x8, not 0x08 

文字列。 "0x%02x"を使用する以外の印刷方法はありますか?

+0

私は好みのレイアウトを得るために、通常は '0x%.8X'を使用しています。これは他のどのメカニズムでも達成できません。 –

+0

先頭の '0x'はテキストであり、実際の書式指定で表示されているものとは関係ありません。 – user3629249

答えて

6

フィールド幅には、#で要求される「代替プレフィックス」が含まれます。

したがって、希望の効果を得るにはprintf("%#04x", i);を使用できます。個人的には、すでに言及した通り"0x%02x"が好きです。 @Rが推奨する

別の方法として、...、最小精度代わりのフィールド幅を使用することです。整数の場合、精度は接頭辞を除外し、必要に応じて常にゼロ詰めされるため、コードはprintf("%#.2x", i);になります。

xなどの整数指定の場合、.の後の数字は最小精度です。長い数値は切り捨てられません。これは、浮動小数点と文字列の動作が.とは異なります。

+0

回答ありがとう^^ – tuoxie

+0

'%#。2x'が望ましいです。精度を意味するときは幅を使用しないでください。 –

+0

@R ..ありがとう、更新されました。 –

関連する問題