背景:我有许多脚本通过查找前导“0x”来解析查找hex数的日志文件。 我们的嵌入式C库改为新的printf。 新的printf比我们之前更符合标准,我的脚本破了。
在Linux机器上:
#include int main( void ) { printf( "%#010xn", 0 ); printf( "%#010xn", 1 ); return 0; }
输出(使用glibc)是:
0000000000 0x00000001
我们公司的输出是:
0x00000000 0x00000001
从printf(3)开始,在’#’标志字符上:“对于x和X转换,非零结果的前缀为字符串”0x“(或X转换为”0X“)。”
我很好奇为什么 。 如果没有挖掘C标准文件或为标准委员会成员购买午餐,为什么不在零价值论证中使用前导0x?
标准似乎是这样编写的:
现在,指定%#x
工作的方式在隔离方面很有意义。 像%010x
这样的工作方式可以%010x
使用。 你正在组合这两个修饰符,最终的结果可能是奇怪的。 对于另一个应用程序,比如自动生成整齐的C代码来初始化表,有0,
而不是0x0
不是问题。
但是没有必要将%#x
和%010x
结合起来。 你可以写0x%08x
来做你想要的。
需要了解更多c/c++开发分享为什么打印0(零)而没有使用C打印格式“%#x”的前导“0x”?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享为什么打印0(零)而没有使用C打印格式“%#x”的前导“0x”?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980031.html