snprintf() 函数输出十六进制字符串时出现前导 0 的问题及解决方法
这是因为在格式化输出时,'%2x' 将每个字节转换为 2 位十六进制数,如果字节的十六进制表示只有 1 位,则会在前面添加一个 0 来填充,以保证输出的每个字节的长度都是 2。
在这种情况下,最后一个字节的十六进制表示为 3d,只有 1 位,因此在输出时会在前面添加一个 0,导致输出的最后一个字符为 0。如果要避免这种情况,可以将格式化输出的字符串长度增加 1,以便能够容纳可能出现的前导 0。例如,可以将代码修改为:
snprintf(hex_str+2*i ,3,'%02x', b[i]);
这样输出的每个字节将始终是 2 位,不会出现前导 0 的情况。
原文地址: https://www.cveoy.top/t/topic/nXG8 著作权归作者所有。请勿转载和采集!