Pergunta

qHash(const QString&) retorna uint, que é de 32 bits.Existe algum padrão Qt forma de obtenção de 64 bits do hash para uma cadeia de caracteres de 32 bits do sistema?Ou eu tenho que implementar uma função de hash de mim?

Foi útil?

Solução

Esta é uma forma de fazê-lo.É multi-plataforma, no sentido de que determinada seqüência de caracteres de rendimento mesmo hash, não importa qual a plataforma.Poderia ser, certamente, mais otimizada, removendo a dependência QDataStream e usando o byte-inversão de funções necessárias para a massagem da ordenação.

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

Outras dicas

Eu estou com medo não existe nenhuma forma padrão em Qt para as versões de 64 bits do hash para QStrings.Mas se você ir em frente com a implementação de hash por si mesmo, então faz sentido estudar este: https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed o que vai te dar um monte de informações sobre cadeias de hash com exemplos de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top