You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用sprintf转换打印十六进制值如何保留前导零

解决方案

问题根因是你当前使用的%x格式符没有指定固定输出宽度和前导零填充规则,同时%x默认匹配unsigned int类型,直接传入long类型存在类型不匹配隐患。

修改方法如下:

  • 将格式符替换为%04lx:0表示空缺位用前导零填充,4表示固定输出宽度至少为4位,l表示匹配的参数是long类型。如果需要输出大写十六进制字符,可替换为%04lX。

修改后的完整代码:

void reverse_and_encode(FILE *fpt, long *src, long *dst) {
    char reversed_src[5], reversed_dst[5];
    sprintf(reversed_src, "%04lx", *dst);
    sprintf(reversed_dst, "%04lx", *src);
    printf("Reversed Source: %s\n", reversed_src);
    printf("Reversed Destination: %s\n", reversed_dst);
}

注意:你定义的字符数组长度为5,刚好可以容纳4位十六进制字符+1位字符串结束符\0,如果传入的long值大于0xFFFF(超过4位十六进制),输出的字符串长度会超过4,导致数组溢出触发未定义行为。如果需要处理更大的数值,请对应增大数组长度,或者先对输入值做& 0xFFFF的按位与操作截断为16位。

内容的提问来源于stack exchange,提问作者Neeraj Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:15:02