سؤال

qHash(const QString&) عائدات uint, ، وهو 32 بت.هل هناك أي طريقة Qt قياسية للحصول على تجزئة 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/what-hashing-algorithm-is-best-for-uniqueness-and-speed والتي ستمنحك الكثير من المعلومات حول سلاسل التجزئة مع أمثلة التعليمات البرمجية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top