Frage

qHash(const QString&) zurückgeben uint, das 32-Bit ist.Gibt es eine Standard-Qt-Methode zum Abrufen von 64-Bit-Hash für eine Zeichenfolge auf einem 32-Bit-System?Oder muss ich selbst eine Hash-Funktion implementieren?

War es hilfreich?

Lösung

Dies ist eine Möglichkeit, dies zu tun.Es ist plattformübergreifend in dem Sinne, dass die angegebene Zeichenfolge unabhängig von der Plattform den gleichen Hash liefert.Es könnte sicherlich weiter optimiert werden, indem die Abhängigkeit von QDataStream aufgehoben und die Byte-Flipping-Funktionen nach Bedarf verwendet werden, um die Endianness zu massieren.

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

Andere Tipps

Ich fürchte, es gibt in Qt keinen Standardweg für 64-Bit-Hashing für QStrings.Aber wenn Sie Hash selbst implementieren, ist es sinnvoll, dies zu studieren: https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed dies gibt Ihnen viele Informationen zum Hashing von Zeichenfolgen mit Codebeispielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top