Domanda

qHash(const QString&) restituisce uint, che è a 32 bit.C'è qualche modo standard QT per ottenere l'hash a 64 bit per una stringa sul sistema a 32 bit?O devo implementare una funzione hash da solo?

È stato utile?

Soluzione

Questo è un modo per farlo.È multipiattaforma, nel senso che ha dato una stringa produrrà lo stesso hash, non importa quale sia la piattaforma.Potrebbe essere certamente ulteriormente ottimizzato rimuovendo la dipendenza da QDatastream e utilizzando le funzioni di lancio dei byte necessarie per massaggiare l'Edianness.

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

Altri suggerimenti

Temo che non ci sia un modo standard in QT per hashing a 64 bit per QSTRINGS. Ma se vai avanti con l'implementazione di hash da solo, allora ha senso studiare questo: https://softwareengineering.stackexchange.com/questions/49550/Questo-Hashing-algorithm-is-Best-for-unifichità-and-speed che ti darà molte informazioni suStringhe hashing con esempi di codice

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top