使用strtol()提供错误输出的十六进制字符串转换

时间:2016-11-30 06:04:57

标签: c strtol

我遇到需要将十六进制字符串0x8aaaf200转换为uint32_t的情况。我首先在我的本地机器上测试它(Linux Debian盒子)。

// str contains "0x8aaaf200"

uint32_t var = (uint32_t)strtol(str, NULL, 0); 
printf("conversion: %x \n\n", var); // prints 8aaaf200

然后我在另一台机器(基于Android)上运行它,但令我惊讶的是,输出结果为7fffffff。我认为它可能与不同机器上的uint32_t大小有关。

有没有人建议如何修复它?我无法更改uin32_t类型的用法,因为它是其他人编写的代码的一部分。

1 个答案:

答案 0 :(得分:2)

实际上,您将LONG_MAX(即2147483647或0x7FFFFFFF)作为返回值,当传递给strtol的值大于LONG_MAX时会发生这种情况。您应该使用无符号类型来表示计算机上的该数字。请使用函数strtoul()代替strtol。