4

qHash(const QString&)返回uint,它是 32 位的。是否有任何标准的 Qt 方法可以在 32 位系统上为字符串获取 64 位哈希?还是我必须自己实现哈希函数?

4

2 回答 2

6

这是一种方法。它是跨平台的,从某种意义上说,无论平台是什么,给定的字符串都会产生相同的哈希值。通过消除对 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;
}
于 2014-02-25T15:18:00.423 回答
2

恐怕在 Q​​t 中对于 QStrings 的 64 位散列没有标准方法。但是,如果您继续自己实现哈希,那么研究这个是有意义的:https ://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed which将通过代码示例为您提供大量关于散列字符串的信息。

于 2014-02-24T22:11:17.950 回答