C++ 如何在Qt中生成文件的md5?
我有代码,它为字符串生成md5。 现在我想为文件添加md5代。 它适用于txt文件(xml、html、txt等),但当我尝试使用二进制文件(zip、bin、apk等)时,我看到了错误的结果。 如何正确读取(char*)中的bin文件以生成有效的散列 我尝试使用TextStream,但结果无效C++ 如何在Qt中生成文件的md5?,c++,qt,md5,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.readAl
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时停止。永远不要将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时停止。永远不要对二进制数据使用QString
和QTextStream
。它们用于Unicode文本,以众所周知的编码方式从字节解码。试着把它们用在二进制数据上,会愉快地、默默地把它拧起来。好吧,但是我能用什么来做呢?你可能想考虑QutotoGigiFasH。Qt内置了md5代。切勿对二进制数据使用QString
和QTextStream
。它们用于Unicode文本,以众所周知的编码方式从字节解码。试着把它们用在二进制数据上,会愉快地、默默地把它拧起来。好吧,但是我能用什么来做呢?你可能想考虑QutotoGigiFasH。Qt内置了md5代。我试图使用QByteArray,但我也得到了错误的结果:(因此,我认为这是我的md5实现的一个问题。但是对于字符串和txt文件,它可以工作,让我们看看你的代码……如果你不像我那样做(例如,你不使用基于范围的构造函数构建std::string
),你也可能会在QByteArray
中出错)。哦,对不起,你的代码可以工作,谢谢)我尝试使用QByteArray,但我也得到了错误的结果:(因此,我认为这是我的md5实现的问题。但是对于字符串和txt文件,它可以工作。让我们看看你的代码…如果你不像我那样做,你也可以用QByteArray
出错(例如,您没有使用基于范围的构造函数构建std::string
)。哦,对不起,您的代码可以正常工作,谢谢)