snprintfhex_str+2i 32x bi; unsigned charb; char hex_str;为什么输入为ea61642266d4883d后输出的是ea61642266d48830
这是因为在格式化输出时,"%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/eHKO 著作权归作者所有。请勿转载和采集!