为什么宽度数在"#"之后无法工作?在printf格式?

时间:2016-10-11 02:18:34

标签: c printf

我想得到" 0x08"对于8号,但是当我使用"%#02x"时,我只得到0x8:

int i = 0x08;
printf("%#02x", i); // only print 0x8, not 0x08

似乎宽度数字在#"#"之后无效。格式字符串。 有没有更好的方法来打印我想要的东西而不是使用" 0x%02x"?

1 个答案:

答案 0 :(得分:6)

字段宽度包括#请求的“备用前缀”。

因此您可以使用:printf("%#04x", i);来获得所需的效果。就我个人而言,我个人更喜欢"0x%02x"

@R ..推荐的另一种方法是使用最小精度而不是字段宽度。对于整数,精度排除前缀,并且必要时始终为零填充,因此代码为printf("%#.2x", i);

对于x之类的整数说明符,.之后的数字是最小精度 - 不会截断更长的数字。这与浮点和字符串的.行为不同。