質問

qHash(const QString&)uintを返します。これは32ビットです。32ビットシステム上の文字列に64ビットハッシュを取得する標準QTの方法はありますか?それとも私自身のハッシュ関数を実装する必要がありますか?

役に立ちましたか?

解決

これはそれをする一つの方法です。それはクロスプラットフォームです。この意味で、文字列はプラットフォームが何であっても同じハッシュを生み出すでしょう。QDATATREARへの依存を取り除き、必要に応じてバイトフリップ関数を使用してエンディアン性をマッサージすることによってさらに最適化することができます。

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

他のヒント

QSTRINGSのための64ビットハッシュのためのQtで標準的な方法がないことを恐れています。 しかし、あなたが自分でハッシュを実装することを先に行ってから、これを勉強することは理にかなっています。 https://softwareengineers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-algorithm-is-best-for-uniqueness-and-speed これはあなたに多くの情報を与えますコード例を持つハッシュ文字列

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top