QSTRING을위한 내장 64 비트 해시 함수?
문제
qHash(const QString&)
는 32 비트 인 uint
를 반환합니다.32 비트 시스템에서 문자열에 대해 64 비트 해시를 얻는 표준 QT 방식이 있습니까?아니면 해시 함수를 직접 구현해야합니까?
해결책
이것은 그것을하는 한 가지 방법입니다.그것은 플랫폼이 무엇인지 상관없이 문자열이 동일한 해시를 산출 할 수있는 의미에서 크로스 플랫폼입니다.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;
}
. 다른 팁
QSTRINGS에 대한 64 비트 해싱에 대해 QT에는 표준 방법이 없습니다. 그러나 자신을 통해 해시를 구현하는 것에 앞서 나가는 경우 : https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-best-for-haniqueness-and-speed 정보를 많이 제공 할 것입니다.코드 예제가있는 해시 문자열.
제휴하지 않습니다 StackOverflow