[英]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.