문제

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 정보를 많이 제공 할 것입니다.코드 예제가있는 해시 문자열.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top