Встроенная 64-битная хэш-функция для QString?
Вопрос
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 , которая даст вам много информации оДРУГИЕ Строки с примерами кода.