C++ 用c+打印十六进制格式的散列数据+;
我正在使用xxHash库进行一些测试: 我下面的代码有问题。哈希已计算并存储在一个类中:C++ 用c+打印十六进制格式的散列数据+;,c++,types,io,C++,Types,Io,我正在使用xxHash库进行一些测试: 我下面的代码有问题。哈希已计算并存储在一个类中: uint64_t hash_data = i.get_hash(); const auto *p = (const unsigned char*) hash_data; 当试图以十六进制格式打印我的哈希时,我无法让它工作。有人能帮我弄清楚吗 我试过用sizeof(p)和strlen(p)循环,但似乎都以seg故障结束。我认为这个无符号字符不会有空终止符,对吗?。我对其他人的代码做过研究,但我似乎仍然无
uint64_t hash_data = i.get_hash();
const auto *p = (const unsigned char*) hash_data;
当试图以十六进制格式打印我的哈希时,我无法让它工作。有人能帮我弄清楚吗
我试过用
sizeof(p)
和strlen(p)
循环,但似乎都以seg故障结束。我认为这个无符号字符不会有空终止符,对吗?。我对其他人的代码做过研究,但我似乎仍然无法找出将此哈希打印为十六进制的最简单方法。除非保证这是一个C字符串,strlen
不适用sizeof(p)
是指针的大小,而不是指针指向的数据量。如果这只是一个64位的值,那么只需迭代8个字节,.Ah。您需要const auto*p=(const unsigned char*)&hash\u数据代码>(注意符号and),然后遍历8个字节。如前所述,您没有读取表示为散列\u数据的8个字节
——您将散列\u数据
视为内存中的一个地址,并尝试在该地址读取8个字节。当然,hash_数据
并不表示内存中的有效地址。您从std::coutprintf(“%llX\n”,hash_数据)得到什么输出如果目标仅仅是显示哈希值,我不确定是否需要指针。这可以从值本身完成,而且更安全,因为遍历字节表示将根据主机系统的本地端性产生不同的结果。除非保证这是一个C字符串,strlen
不适用sizeof(p)
是指针的大小,而不是指针指向的数据量。如果这只是一个64位的值,那么只需迭代8个字节,.Ah。您需要const auto*p=(const unsigned char*)&hash\u数据代码>(注意符号and),然后遍历8个字节。如前所述,您没有读取表示为散列\u数据的8个字节
——您将散列\u数据
视为内存中的一个地址,并尝试在该地址读取8个字节。当然,hash_数据
并不表示内存中的有效地址。您从std::coutprintf(“%llX\n”,hash_数据)得到什么输出如果目标仅仅是显示哈希值,我不确定是否需要指针。这可以从值本身完成,而且更安全,因为遍历字节表示将根据主机系统的本地端性产生不同的结果。