Вопрос

qHash(const QString&) возвращает uint, который 32-битный.Есть ли какой-либо стандартный способ получить 64-битное хеш для строки в 32-битной системе?Или я должен реализовать хеш-функцию сам?

Это было полезно?

Решение

Это один способ сделать это.Это кроссплатформенная, в том смысле, что данная строка даст то же хеш, независимо от того, что такое платформа.Это может быть, безусловно, дополнительно оптимизировано путем удаления зависимости от QdataStream и используя байтовые функции по мере необходимости для массажирования эндин.

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

Другие советы

Я боюсь, что в Qt нет стандартного способа для 64-битной перемешивания для QStrings. Но если вы продолжаете реализовывать хеш самостоятельно, то имеет смысл изучать это: https://softwareengineering.stackexchange.com/questions/49550/which-hashing-Algorithm-is-best-for-forn-uniquent-and-speed , которая даст вам много информации оДРУГИЕ Строки с примерами кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top