【发布时间】:2016-11-30 06:04:56
【问题描述】:
我有一种情况需要将十六进制字符串 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 大小有关。
有人对如何修复它有建议吗?我无法更改 uin32_t 类型的用法,因为它是其他人编写的代码的一部分。
【问题讨论】:
-
uint32_t在任何符合 C99 的编译器上始终为 32 位。但是它的正确格式说明符是PRIx32 -
转换后尝试测试
errno的值,可能会给出一些线索。 -
@JoëlHecht 错误状态
Errno: Math result not representable -
也许您的平台有 strtoul() 可用,如果有,请使用它。
-
@TonyB:那行得通。谢谢!