web-dev-qa-db-ja.com

16進数のprintf()フォーマット

これは重要な質問というよりは興味深い質問ですが、16進数を先頭に0を付けた8桁の数字として印刷するときに、%#08X0x%08Xと同じ結果を表示しないのはなぜですか?

前者を使用しようとすると、08フォーマットフラグが削除され、8だけでは機能しません。

またしても興味がありました。

149
wsmccusker

#部分は、出力文字列に0xを与えます。 0xは、08の部分にリストされている「8」の文字に対してカウントされます。同じにしたい場合は、10文字を入力する必要があります。

int i = 7;

printf("%#010x\n", i);  // gives 0x00000007
printf("0x%08x\n", i);  // gives 0x00000007
printf("%#08x\n", i);   // gives 0x000007

xの大文字と小文字の変更も、出力される文字の大文字と小文字の区別に影響します。

printf("%04x", 4779); // gives 12ab
printf("%04X", 4779); // gives 12AB
236
Mike

"0x"は8文字のカウントにカウントされます。 "%#010x"が必要です。

#は、0xに0を追加しない でない であることに注意してください - 結果は0000000000になります - したがって、実際にはとにかく"0x%08x"を使用するべきです。

50
Random832