printf精度

3

我正在用C语言编写程序,为了调试,我使用了几个printf语句。是否有一种方法可以在printf中改变HEX输出的精度?例如,我有0xFFF,但我想将其打印为0x0FFF。

2个回答

13

使用 printf("%04X", x);

0 表示“用零填充”,4 表示“至少四个字符宽度”。

对于整数,不使用术语“精度”(因为整数精确的),而是“字段宽度”或类似的术语。精度是在打印浮点数时科学计数法中的数字位数。


实际上,您可以为整数转换说明符指定精度:printf("%.4X", x"); 可以这样做,并且按预期工作(对于 diouxX 转换,精度指定要显示的最小数字位数)。 - caf
在C语言中,即使是对于整数,术语"precision"也被用来描述这个概念。%.4X中的.4部分被称为精度。 - caf
2
最好使用%.4x,即使用精度而不是宽度。宽度包括其他内容,如符号的空间,0x(如果使用了#标志)等。 - R.. GitHub STOP HELPING ICE
我想知道(在glibc的手册页面中)这是如何解释的(使用%#04x格式化0x618会得到0x618(而不是0x0618),但使用%#0.4x格式化则会得到0x0618。手册页面上说:“如果给出数值转换(d、i、o、u、x和X)的精度,则忽略0标志。” - U. Windl
1
@PSkocik:我想给你一个+1,但这是不可能的。你的评论非常有启发性! - U. Windl
显示剩余2条评论

6
您可以在使用printf输出十六进制时,使用precision字段来控制精度。
例如:
int i = 0xff;
printf ("i is 0x%.4X\n", i);
printf ("i is  %#.4X\n", i);

将会同时打印出: 0x00FF


这种做法得出的答案与Kerrek完全相同,尽管使用printf标志略有不同。 - J Teller
比常见的 %04X 稍微冗长一些(多出50%)。 - fvu

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