qHash(const QString&)
返回 32 位的 uint
。在 32 位系统上,有没有标准的 Qt 方法可以获得字符串的 64 位哈希值?还是我需要自己实现一个哈希函数?
这是一种实现方式。它是跨平台的,意味着无论平台如何,给定的字符串都会产生相同的哈希值。通过消除对QDataStream的依赖并根据需要使用字节翻转函数来调整字节序,可以进一步优化它。
qint64 hash(const QString & str)
{
QByteArray hash = QCryptographicHash::hash(
QByteArray::fromRawData((const char*)str.utf16(), str.length()*2),
QCryptographicHash::Md5
);
Q_ASSERT(hash.size() == 16);
QDataStream stream(&hash);
qint64 a, b;
stream >> a >> b;
return a ^ b;
}
QCryptographicHash
。 - Violet Giraffe很抱歉,在Qt中,没有标准的64位哈希处理QString的方法。
但是,如果您要自己实现哈希,请先学习这个: https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed,其中提供了许多有关使用代码示例哈希字符串的信息。
qHash
添加填充位即可。 - hyde