QSTRINGのための内蔵64ビットハッシュ関数
質問
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で標準的な方法がないことを恐れています。
しかし、あなたが自分でハッシュを実装することを先に行ってから、これを勉強することは理にかなっています。
所属していません StackOverflow