如何在Qt中生成文件的md5?
How to generate md5 of file in Qt?
我有代码,可以为字符串生成 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());
我还尝试使用 QByteArray,然后将 byteArray 转换为 char*
但它也不能正常工作。
我该如何解决?
切勿将 QString
和 QTextStream
用于二进制数据。 它们用于 Unicode 文本,已解码来自众所周知编码的字节。尝试将它们用于二进制数据会愉快而安静地搞砸,因为默认情况下 QString
会尝试使用某种编码来解释输入数据,将其转换为 UTF-16 存储,默默地跳过它无法理解的内容。
用于存储二进制数据的class是QByteArray
,您可以使用QFile::read()
方法读取其中的整个文件。
QByteArray data;
{
QFile file(fileName);
file.open(QIODevice::ReadOnly);
data.readAll();
}
string res = md5(std::string(data.begin(), data.end());
请注意,我使用基于范围的构造函数构建了 std::string
,因为仅使用 std::string(data.data())
(来自 C 字符串的构造函数)将在第一个嵌入的 NUL 处停止。
我有代码,可以为字符串生成 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());
我还尝试使用 QByteArray,然后将 byteArray 转换为 char* 但它也不能正常工作。 我该如何解决?
切勿将 QString
和 QTextStream
用于二进制数据。 它们用于 Unicode 文本,已解码来自众所周知编码的字节。尝试将它们用于二进制数据会愉快而安静地搞砸,因为默认情况下 QString
会尝试使用某种编码来解释输入数据,将其转换为 UTF-16 存储,默默地跳过它无法理解的内容。
用于存储二进制数据的class是QByteArray
,您可以使用QFile::read()
方法读取其中的整个文件。
QByteArray data;
{
QFile file(fileName);
file.open(QIODevice::ReadOnly);
data.readAll();
}
string res = md5(std::string(data.begin(), data.end());
请注意,我使用基于范围的构造函数构建了 std::string
,因为仅使用 std::string(data.data())
(来自 C 字符串的构造函数)将在第一个嵌入的 NUL 处停止。