内置64位散列函数用于QString?

时间:2014-02-24 22:01:27

标签: c++ qt hash qhash

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

2 个答案:

答案 0 :(得分:5)

这是一种做法。它是跨平台的,在某种意义上,无论平台是什么,给定字符串都会产生相同的哈希值。通过消除对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;
}

答案 1 :(得分:2)

我担心Qt中没有用于QStrings的64位散列的标准方法。 但是如果你继续自己实现哈希,那么研究它是有意义的:https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed它会给你很多关于散列字符串和代码示例的信息。