gpt4 book ai didi

c - 使用 strtol() 的十六进制字符串转换给出错误的输出

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:55 24 4
gpt4 key购买 nike

我有一种情况需要将十六进制字符串 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 类型的用法,因为它是其他人编写的代码的一部分。

最佳答案

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com