gpt4 book ai didi

使用 strtoul() 将十六进制字符串转换为 unsigned long

转载 作者:行者123 更新时间:2023-12-03 23:24:09 25 4
gpt4 key购买 nike

我有这个愚蠢的示例程序,它将输入值作为十六进制并将其转换为无符号长整数。转换后我将结果打印出来。

#include <stdio.h>

int main (int argc, char *argv[])
{

unsigned long int id = 0;

id = strtoul(argv[1], NULL, 16);
printf("value: %lx\n", id);

return 0;
}

问题是用大于 31 位的十六进制数运行这个程序会导致输出值完全错误。高32位全部转换为(0xf)。 strtoul() 不应该能够处理高达 2^64 的数字吗?为什么位 > 32 是垃圾?机器是X86_64,其实strtoull()的结果也是一样的。
$ ./ex 0x7fffffff
value: 7fffffff

$ ./ex 0x80000000
value: ffffffff80000000

$ ./ex 0x3cf180000000
value: ffffffff80000000

最佳答案

您的解决方案在我的本地机器上对我来说正常工作。但是,我认为您需要包括:

#include <stdlib.h>

Strtoul 是 stdlib 的一部分。

关于使用 strtoul() 将十六进制字符串转换为 unsigned long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31709957/

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