为什么在printf格式中,#后面的宽度数字无法运行?

3
我希望把数字8转换成"0x08"的形式,但是当我使用"%#02x"时,只能得到0x8:
int i = 0x08;
printf("%#02x", i); // only print 0x8, not 0x08

似乎在格式字符串中,#后面的宽度数字无法起作用。 除了使用"0x%02x"之外,是否有更好的打印方法?

我经常使用 0x%.8X,因为它可以得到我喜欢的布局,并且没有其他机制可以达到这个效果。 - Jonathan Leffler
你应该意识到,前导的 0x 只是文本,与实际格式规范打印的内容无关。 - user3629249
1个回答

6
领域宽度包括#所请求的“替代前缀”。
因此,您可以使用:printf("%#04x", i);来获得所需效果。就个人而言,我更喜欢"0x%02x",正如您已经提到的那样。
另一种方法是由@R..推荐的,即使用最小精度而不是领域宽度。对于整数,精度不包括前缀,并且如果需要,始终进行零填充,因此代码将为printf("%#.2x", i);
对于诸如x之类的整数说明符,点后面的数字是最小精度——较长的数字不会被截断。这与浮点和字符串的.的行为不同。

谢谢您的回答 ^^ - tuoxie
最好使用%#.2x。当您需要精度时,请不要使用宽度。 - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接