首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >printf()十六进制格式

printf()十六进制格式
EN

Stack Overflow用户
提问于 2013-02-07 00:20:07
回答 4查看 701.4K关注 0票数 233

为什么在将十六进制数字打印为带有前导零的8位数字时,%#08X不显示与0x%08X相同的结果

当我尝试使用前者时,08格式化标志被移除,并且它不仅仅适用于8

EN

回答 4

Stack Overflow用户

发布于 2013-02-07 00:24:44

#部件在输出字符串中给出一个0x0x计入08部件中列出的"8“字符。如果你想让它是相同的,你需要10个字符。

代码语言:javascript
复制
int i = 7;

printf("%#010x\n", i);  // gives 0x00000007
printf("0x%08x\n", i);  // gives 0x00000007
printf("%#08x\n", i);   // gives 0x000007

更改x的大小写也会影响输出字符的大小写。

代码语言:javascript
复制
printf("%04x", 4779); // gives 12ab
printf("%04X", 4779); // gives 12AB
票数 338
EN

Stack Overflow用户

发布于 2013-02-07 00:25:23

"0x“计入八字符数。你需要"%#010x"

请注意,#不会将0x附加到0-结果将是0000000000 -所以您可能实际上应该使用"0x%08x"

票数 62
EN

Stack Overflow用户

发布于 2021-04-27 20:26:27

#会使0x (或%#X0X )优先于输出,除非值为0,因此如果希望0x始终出现在输出中,则不应使用#

您可以结合使用width字段和0标志来生成前导零:%08x将带有前导零的数字填充到宽度8。如果希望所有32位值的输出一致,请使用"0x08x"

您还可以使用精度字段:%.8x将带有前导零的数字填充到8位数的总和。因此,您也可以使用"0x%.8x"来实现您的目的。

如果前缀是作为转换的一部分生成的,则这些转换规范会有所不同,例如#0x或有符号转换中的负数的-,其长度计入宽度,而不计入精度说明符。此外,精度字段可以与宽度字段组合:

代码语言:javascript
复制
printf("|%10x|", 256)      // outputs |       100|
printf("|%010x|", 256)     // outputs |0000000100|
printf("|%#010x|", 256)    // outputs |0x00000100|

printf("|%10.8x|", 256)    // outputs |  00000100|
printf("|%#10.8x|", 256)   // outputs |0x00000100|
printf("|0x%.8x|", 256)    // outputs |0x00000100|

printf("|%10x|", 0)        // outputs |         0|
printf("|%010x|", 0)       // outputs |0000000000|
printf("|%#010x|", 0)      // outputs |0000000000|

printf("|%10.8x|", 0)      // outputs |  00000000|
printf("|%#10.8x|", 0)     // outputs |  00000000|
printf("|0x%.8x|", 0)      // outputs |0x00000000|

我推荐使用最后一个:"0x%.8x"

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14733761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档