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-uniqueness-and-speed который даст вам много информации о хэшировании строк с примерами кода.