2010-11-22 185 views
1
#include<stdio.h> 
int main() 
{ 
printf("%#04x",50); 
} 

有人向我展示了上面的代码,我无法理解它,因为我已经在C程序中使用了printf,但是第一次在我的生活中看到过这种用法。 为什么上面的代码打印输出照为什么下面的printf打印0x32

0x32 

可有一个人给我一个链接或参考了一些东西,这样我可以更好地了解它。

+2

如果你已经指出了你期望看到的内容,它会有所帮助。 – 2010-11-22 14:39:33

回答

5

printf(3)手册页面:

的标志字符

字符%后跟下列标志的零个或多个:该值应被转换为一个“备用

#—形成”。对于o转换,输出字符串的第一个字符为零(如果它已经不为0,则加前缀0)。对于x和X转换,非零结果的前缀为字符串“0x”(或用于X转换的“0X”)。对于a,e,E,f,F,g和G转换,结果将始终包含一个小数点,即使没有数字后跟一个小数点(通常,小数点只出现在这些转换的结果中数字如下)。对于g和G转换,结尾的零不会像结果一样从结果中删除。对于其他转换,结果未定义。

省略其他标志...

因此,%#预规划 “0X” 的输出,因为输出格式为x。 0表示用于填充的0(零)。然后数字4表示要打印的字符总数是四个。如果已将数字4与10进行了交换,则输出将会是0x00000032 –共10个字符。

+0

0不是预先标记'0x'的标志的一部分。它用零指定填充而不是空格。在这个例子中,它最终变得无关紧要,因为没有填充。 – 2010-11-22 15:56:04

5

50十进制数是32个十六进制数。

除此之外,documentation应告诉你所有你需要知道的。

2

由于%x将给定值格式化为十六进制。

事实上,0x32(十六进制)== 50(十进制)。

这是一个很好的primer供参考。

+0

好吧,这是很好的链接。 – 2010-11-24 08:09:20

相关问题