题
qHash(const QString&)
回报 uint
, ,这是 32 位的。有没有标准的 Qt 方法可以在 32 位系统上获取字符串的 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;
}
其他提示
恐怕 Qt 中没有用于 QString 的 64 位哈希的标准方法。但是,如果您继续自己实现哈希,那么研究这一点是有意义的: https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed 这将为您提供大量有关哈希字符串的信息以及代码示例。
不隶属于 StackOverflow