これは重要な質問というよりは興味深い質問ですが、16進数を先頭に0を付けた8桁の数字として印刷するときに、%#08X
が0x%08X
と同じ結果を表示しないのはなぜですか?
前者を使用しようとすると、08
フォーマットフラグが削除され、8
だけでは機能しません。
またしても興味がありました。
#
部分は、出力文字列に0x
を与えます。 0
とx
は、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
"0x"は8文字のカウントにカウントされます。 "%#010x"
が必要です。
#
は、0xに0を追加しない でない であることに注意してください - 結果は0000000000
になります - したがって、実際にはとにかく"0x%08x"
を使用するべきです。