繁体   English   中英

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

[英]Convert hex string to unsigned long using strtoul()

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

#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的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM