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

时间:2015-07-29 19:57:04

标签: c

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

#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

1 个答案:

答案 0 :(得分:2)

您的解决方案在我的本地计算机上正常运行。但是,我认为你需要包括:

#include <stdlib.h>

Strtoul是stdlib的一部分。