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

tuo*_*xie 3 c printf

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

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

在格式字符串中的"#"后,宽度数似乎无法工作.除了使用"0x%02x"之外,有没有更好的方法来打印我想要的内容?

M.M*_*M.M 6

字段宽度包括请求的"备用前缀" #.

所以你可以使用:printf("%#04x", i);来获得理想的效果.就我个人而言,我个人更喜欢"0x%02x".

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

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