C++ C strtoll十六进制到无符号长
我有像769cb353f44f 37679162ec73这样的十六进制字符串 当我使用C++ C strtoll十六进制到无符号长,c++,c,C++,C,我有像769cb353f44f 37679162ec73这样的十六进制字符串 当我使用strtoul(prt,null或ptr,16),strtoull(prt,null或ptr,16)或strtoumax(prt,null或ptr,16)只有最后8个字节被转换为无符号长字节 像这样FFFFFF B353F44FFFFFFF 9162EC73 我希望这些字符串被存储为它们所代表的数字 有人知道如何解决这个问题,或者至少知道为什么会发生吗?您需要无符号长字符,因为字符串太大,无法放入无符号长字符中
strtoul(prt,null或ptr,16)
,strtoull(prt,null或ptr,16)
或strtoumax(prt,null或ptr,16)
只有最后8个字节被转换为无符号长字节
像这样FFFFFF B353F44F
FFFFFF 9162EC73
我希望这些字符串被存储为它们所代表的数字
有人知道如何解决这个问题,或者至少知道为什么会发生吗?您需要无符号长字符,因为字符串太大,无法放入无符号长字符中 然后您还需要检查是否将结果设置为无符号long,并使用%llX(十六进制格式的无符号long)打印它
#包括
#包括
#包括
int main()
{
常量字符*ptr=“769cb353f44f”;
无符号长数;
num=strtoull(ptr,NULL,16);
printf(“%llx\n”,num);
返回0;
}
这个数字太大了。系统上的sizeof(unsigned long)
是什么。也许您可以提供一个代码示例来帮助澄清您的问题。我在想,也许你的数字在某个地方无意中被转换成了32位的值,但如果没有代码示例,很难判断。实际代码是通过blowfish算法解析数据的。出于某种原因,它的输出是13个字符长,有时是16个字符长的字符串,以fff…开头。。。。我的格式如下:“printf(“%08lx%08lx”,ul1,ul2);”如果我将其更改为“%llx”,输出看起来是一样的。总而言之,如果我不能将这些十六进制字符串转换为无符号长字符串,解密将无法工作。令人惊讶的是,如果数据未存储在文件中,则加密/解密工作正常。
#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;
}