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

// str contains "0x8aaaf200"

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

然后我在另一台机器上运行了它(基于Android),但令我惊讶的是,输出结果是7fffffff。我认为这可能与不同机器上的尺寸有关。
有人对如何修理它有什么建议吗?我无法更改uint32_t类型的用法,因为它是其他人编写的代码的一部分。

最佳答案

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

关于c - 使用strtol()进行十六进制字符串转换会产生错误的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40881414/

10-11 16:57