C++ QString的内置64位哈希函数?

C++ QString的内置64位哈希函数?,c++,qt,hash,qhash,C++,Qt,Hash,Qhash,qHash(const QString&)返回32位的uint。在32位系统上,有没有标准的Qt方法来获取字符串的64位哈希?或者我必须自己实现一个散列函数吗?恐怕Qt中没有标准的方法来对qstring进行64位散列。 但是如果你自己去实现hash,那么研究它是有意义的:这将为你提供大量关于用代码示例对字符串进行hash的信息。这是一种方法。它是跨平台的,在这个意义上,给定的字符串将产生相同的哈希值,无论平台是什么。当然,可以通过消除对QDataStream的依赖并根据需要使用字节翻转函数来处理

qHash(const QString&)
返回32位的
uint
。在32位系统上,有没有标准的Qt方法来获取字符串的64位哈希?或者我必须自己实现一个散列函数吗?

恐怕Qt中没有标准的方法来对qstring进行64位散列。
但是如果你自己去实现hash,那么研究它是有意义的:这将为你提供大量关于用代码示例对字符串进行hash的信息。

这是一种方法。它是跨平台的,在这个意义上,给定的字符串将产生相同的哈希值,无论平台是什么。当然,可以通过消除对QDataStream的依赖并根据需要使用字节翻转函数来处理endianness来进一步优化它

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;
}

请选择内联内容而不是仅链接答案,即使它是SE站点。@LaszloPapp:内联内容是什么意思?这是什么特殊功能吗?@yshurik他的意思是在这个页面上总结链接的内容,这样可以节省人们点击的时间,并确保在链接断开时答案不会失效。为什么要使用64位哈希?为了更好地避免冲突,还是只是为了在某个地方填充为哈希保留的64位?如果您想避免任何实际的冲突机会,我想说的是,您至少需要64:MD5以外的位(如果您不关心安全方面,那么就需要SHA256或其他东西)。否则,只需将填充位添加到32位
qHash
。我将避免使用QDataStream,但除此之外,这是一个很好的答案,谢谢。我不知道
qcryptographicshash