gpt4 book ai didi

c++ - 使用 Crypto++ 将文件的 CRC 计算为数值

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:16 28 4
gpt4 key购买 nike

我正在接收文件及其 CRC(数字值)。我必须重新计算接收到的文件的 CRC 并进行比较。我正在使用 Crypto++,但它没有给我数值。请告诉我如何使用 Crypto++ 计算文件的 CRC32。

#include<iostream>
#include<string>
#include <cryptopp/sha.h>
#include <cryptopp/crc.h>
#include <cryptopp/hex.h>
typedef int UInt32;
#include <cryptopp/files.h>

using namespace std;

string calculateCRC(const string& fileName)
{
string result;
CryptoPP::CRC32 hash;
CryptoPP::FileSource(fileName.c_str(),true,
new CryptoPP::HashFilter(hash,
new CryptoPP::StringSink(result)));
return result;
}

int main(int argc, char** argv)
{
cout << endl << calculateCRC("./test.cpp");
}

结果为“\271\063\307Q”。谢谢

最佳答案

This gives result as "\271\063\307Q"

我相信这是 3 个字节的二进制数据的八进制显示。在 GDB 下,您可以使用 x/4b <address>以 ASCII 打印:B9 33 C7 ... .

添加 HexEncoder filter chain如果你想用 ASCII 而不是二进制:

CRC32 hash;
string result;

FileSource fs(fileName.c_str(), true,
new HashFilter(hash,
new HexEncoder(
new StringSink(result))));

cout << result << endl;

它的输出类似于:

$ ./test.exe 
80BA6847

typedef int UInt32;

这可能不正确。 int遭受溢出和未定义的行为;同时 unsigned int没有。

关于c++ - 使用 Crypto++ 将文件的 CRC 计算为数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674860/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com