我试图用C ++重写这个python函数
def hash(name):
readsize = 64 * 1024
with open(name, 'rb') as f:
size = os.path.getsize(name)
data = f.read(readsize)
f.seek(-readsize, os.SEEK_END)
data += f.read(readsize)
return hashlib.md5(data).hexdigest()
这是我尝试过的。
void hash(QString name) {
QFile file(name);
long int readsize = 64 * 1024;
long int size = file.size();
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug() << "coundn't open your file";
return;
}
QByteArray data = file.read(readsize);
file.seek(size - readsize);
data += file.read(readsize);
QString h = QString(QCryptographicHash::hash(data, QCryptographicHash::Md5).toHex());
return QCryptographicHash::hash(data, QCryptographicHash::Md5).toHex();
}
令人惊讶的是,这个C ++函数只在readsize < 340-ish
时有效。我不知道为什么,但是如果读取量更大,它甚至不会返回正确的字节数(我希望len(数据)== 4 *最后读取),第二个file.read
不返回正确的字节数。