我有这个愚蠢的示例程序,它将输入值作为十六进制并将其转换为无符号长整数。转换后,我打印出结果。
#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的数字?为什么位&gt; 32垃圾?机器是X86_64,实际上,结果与strtoull()相同。
$ ./ex 0x7fffffff
value: 7fffffff
$ ./ex 0x80000000
value: ffffffff80000000
$ ./ex 0x3cf180000000
value: ffffffff80000000
答案 0 :(得分:2)
您的解决方案在我的本地计算机上正常运行。但是,我认为你需要包括:
#include <stdlib.h>
Strtoul是stdlib的一部分。