QString的内置64位哈希函数?

Vio*_*ffe 4 c++ hash qt qhash

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

Rei*_*ica 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;
}
Run Code Online (Sandbox Code Playgroud)