如何在Qt中生成md5文件
How to generate md5 of file in Qt?
我有代码,为字符串生成md5。现在我要为文件添加md5生成。它的工作与txt文件(xml, html, txt等),但当我试图做它与二进制文件(zip, bin, apk等)我看到错误的结果。我怎样才能正确地读取bin文件在(char*),以产生有效的哈希?
我试图使用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存储,默默地跳过它无法理解的任何内容。
存储二进制数据的类是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处停止。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何使用Boost计算文件的MD5
- 阻止基于md5哈希执行特定的.exe文件
- Android NDK 获取二进制文件的 md5
- CMake检查下载文件的哈希值(MD5/SHA256)
- 文件的 MD5 具有句柄 hFile
- 在C++中是否已经为文件系统迷你过滤器驱动程序编写了一个计算MD5哈希的函数
- 逐行散列文件时错误的 md5 哈希值
- 如何计算大文件的 MD5 和 SHA 校验和
- 将二进制文件内容保存在字符串中,以便能够对其进行 md5 并在以后与其他文件进行比较
- 如何在Qt中生成md5文件
- md5.h文件未找到错误Xcode 7 for Mac应用程序
- 128 位 MD5 在不同数量的文件(例如 1000 万或 5000 万)上的冲突率是多少?
- md5的实现在字符串上工作得很好,但是在文件上不能给出正确的结果
- 相同的内容,不同的MD5-文件和字符串