Pregunta

qHash(const QString&) devuelve uint, que es de 32 bits.¿Hay alguna forma estándar QT de obtener un hash de 64 bits para una cadena en un sistema de 32 bits?¿O tengo que implementar una función de hash yo mismo?

¿Fue útil?

Solución

Esta es una forma de hacerlo.Es multiplataforma, en el sentido de que la cadena dada producirá la misma hash sin importar cuál sea la plataforma.Ciertamente, podría optimizarse aún más al eliminar la dependencia de QdataTream y usar las funciones de desplazamiento de bytes según sea necesario para masajear la endianesidad.

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

Otros consejos

Me temo que no hay una forma estándar en QT durante un hash de 64 bits para QSMSTRINGS. Pero si sigue adelante con la implementación de HASH por usted mismo, entonces tiene sentido estudiar esto: https://softwareengineering.stacexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniques-and-and-speed que le dará mucha información sobreCuerdas de hashing con ejemplos de código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top