#include<stdio.h>
int main()
{
printf("%#04x",50);
}
有人向我展示了上面的代码,我无法理解它,因为我已经在C程序中使用了printf,但是第一次在我的生活中看到过这种用法。 为什么上面的代码打印输出照为什么下面的printf打印0x32
0x32
可有一个人给我一个链接或参考了一些东西,这样我可以更好地了解它。
#include<stdio.h>
int main()
{
printf("%#04x",50);
}
有人向我展示了上面的代码,我无法理解它,因为我已经在C程序中使用了printf,但是第一次在我的生活中看到过这种用法。 为什么上面的代码打印输出照为什么下面的printf打印0x32
0x32
可有一个人给我一个链接或参考了一些东西,这样我可以更好地了解它。
从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不是预先标记'0x'的标志的一部分。它用零指定填充而不是空格。在这个例子中,它最终变得无关紧要,因为没有填充。 – 2010-11-22 15:56:04
50十进制数是32个十六进制数。
除此之外,documentation应告诉你所有你需要知道的。
如果你已经指出了你期望看到的内容,它会有所帮助。 – 2010-11-22 14:39:33