Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C strtoll十六进制到无符号长_C++_C - Fatal编程技术网

C++ C strtoll十六进制到无符号长

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 我希望这些字符串被存储为它们所代表的数字 有人知道如何解决这个问题,或者至少知道为什么会发生吗?您需要无符号长字符,因为字符串太大,无法放入无符号长字符中

我有像769cb353f44f 37679162ec73这样的十六进制字符串

当我使用
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;
}