如何在Qt中生成文件的md5?

Pei*_*ein 1 c++ qt md5

我有代码,它为字符串生成md5.现在我想为文件添加代md5.它适用于txt文件(xml,html,txt等),但是当我尝试使用二进制文件(zip,bin,apk等)时,我看到错误的结果.如何正确读取(char*)中的bin文件以生成有效的哈希?

我试图使用TextStream,但结果无效

QFile file(fileName);
file.open(QIODevice::ReadOnly);

QTextStream in(&file);
QString t = in.readAll();
file.close();

string res = md5(t.toStdString());
Run Code Online (Sandbox Code Playgroud)

此外,我尝试使用QByteArray,然后将byteArray转换为char*但它也无法正常工作.我该如何解决?

Mat*_*lia 5

永远不要QStringQTextStream二进制数据.它们用于Unicode文本,以众所周知的编码从字节解码.尝试将它们用于二进制数据将很乐意并且默默地将其搞砸,因为QString默认情况下将尝试使用某种编码来解释输入数据以将其转换为其UTF-16存储,无声地跳过它无法理解的任何内容.

用于存储二进制数据的类是QByteArray,您可以使用该QFile::read()方法读取其中的整个文件.

QByteArray data;
{
    QFile file(fileName);
    file.open(QIODevice::ReadOnly);
    data.readAll();
}

string res = md5(std::string(data.begin(), data.end());
Run Code Online (Sandbox Code Playgroud)

请注意,我std::string使用基于范围的构造函数构建了它,因为只使用std::string(data.data())(来自C字符串的构造函数)将停止在第一个嵌入式NUL.