我有像这样的六角形字符串769cb353f44f 37679162ec73。
当我使用strtoul(prt, null or ptr, 16)
,strtoull(prt, null or ptr, 16)
或strtoumax(prt, null or ptr, 16)
时,只有最后8个字节会转换为无符号长整数。
喜欢这个ffffffffb353f44f
ffffffff9162ec73
。
我希望这些字符串存储为它们代表的数字。
有谁知道如何解决这个问题,或者至少为什么会这样?
答案 0 :(得分:1)
你需要unsigned long long,因为字符串太大而无法放入unsigned long。
然后你还需要检查你是否将结果设置为无符号长long并使用%llX打印它(无符号long long以十六进制格式)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
const char * ptr = "769cb353f44f";
unsigned long long num;
num = strtoull(ptr, NULL, 16);
printf("%llx\n", num);
return 0;
}