Question

qHash(const QString&) Retour uint, qui est 32 bits.Existe-t-il un moyen Qt standard d'obtenir un hachage 64 bits pour une chaîne sur un système 32 bits ?Ou dois-je implémenter moi-même une fonction de hachage ?

Était-ce utile?

La solution

C'est une façon de procéder.C'est multiplateforme, dans le sens où une chaîne donnée produira le même hachage quelle que soit la plateforme.Il pourrait certainement être encore optimisé en supprimant la dépendance à l'égard de QDataStream et en utilisant les fonctions de retournement d'octets si nécessaire pour masser l'endianisme.

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

Autres conseils

Je crains qu'il n'existe pas de méthode standard dans Qt pour le hachage 64 bits pour QStrings.Mais si vous continuez à implémenter le hachage par vous-même, il est logique d'étudier ceci : https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed qui vous donnera beaucoup d'informations sur le hachage de chaînes avec des exemples de code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top