【发布时间】:2016-05-07 19:33:36
【问题描述】:
查看this 问题后,我没有找到所需的解决方案,所以我尝试通过以下方式使用strtol:
in = (unsigned char *)malloc(16);
for(size_t i = 0; i < (size_t)strlen(argv[2]) / 2; i+=2 )
{
long tmp = 0;
tmp = strtol((const char *)argv[2] + i, &argv[2] + 2, 16);
memcpy(&in[i], &tmp, 1);
}
这段代码产生了几个中间值:
谁能解释一下为什么整个in 数组被0xFF(255) 字节填充以及为什么tmp 不等于它的估计值?
也欢迎提供有关如何改进上述代码以使用正确的十六进制值填充 in 数组的提示。
【问题讨论】:
-
去掉演员表。
(unsigned char *)是不必要的。(size_t)是不必要的,因为strlen()的返回类型已经是size_t。而(const char *)argv[2] + i, &argv[2] + 2是错误的。 -
strtol的第二个参数完全错误 - 与输入字符串无关。我建议你的循环应该是strlen(...)而不是strlen(...)/2,如果你打算尝试多次转换输入字符串,跳过第一对,下一对等十六进制数字。
标签: c arrays string hex strtol