Funzione hash a 64 bit integrata per QString?
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?
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