qHash(const QString&)
返回uint
,这是32位。是否有任何标准的Qt方式获得64位散列的32位系统上的字符串?或者我必须自己实现散列函数?用于QString的内置64位散列函数?
4
A
回答
4
这是做到这一点的一种方法。它是跨平台的,从某种意义上说,无论平台是什么,给定的字符串都会产生相同的散列。当然可以通过消除对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;
}
+0
我会避免QDataStream,但否则这是一个很好的答案,谢谢。我不知道'QCryptographicHash'。 –
2
恐怕Qt中没有用于QStrings的64位散列的标准方法。 但是,如果你继续自己实现散列,那么研究这个是有意义的:https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed这将给你很多关于散列字符串的信息和代码示例。
相关问题
- 1. 指数大于64位的散列函数?
- 2. C++ OpenSSL:基于md5的64位散列
- 3. 16位散列函数
- 4. 关于散列函数
- 5. 用于4G内存的JBoss 7内存配置,64位
- 6. 修复散列中的散列位置
- 7. 用于覆盖NSObject散列方法的推荐散列函数
- 8. 的Python:更快的通用散列函数与内置的库
- 9. 什么样的散列算法用于Hive的内置HASH()函数
- 10. 使用散列函数的N个第一位有一个N位散列
- 11. 大整数整数的完美散列函数[1..2^64-1]
- 12. 一个128位散列与两个不同的64位散列(非加密)?
- 13. 整数低于5000的散列函数?
- 14. 128位整数散列函数
- 15. MongoDB用于散列数据库用户密码的散列函数是什么?
- 16. 散列函数
- 17. 配置Oracle OCI8用于Windows 64位
- 18. C函数的TAN在64位GCC中返回值的位置?
- 19. 如何更新散列数组中的值,该散列值位于perl中散列的散列中?
- 20. 用于C#的Quantlib 64位?
- 21. PHP函数存在散列等于Redeclared
- 22. 使用散列函数发送函数
- 23. 如何将64位散列值缩短为48位值?
- 24. 问题的散列函数:散列(1)==散列(1.0)
- 25. ODBC/Win7 64位/ Excel 2010 64位限于255列吗?
- 26. 散列函数.NET
- 27. MD5散列函数
- 28. OCaml 3.12.0 64位适用于Windows 7 64
- 29. 使用散列位置刷新页面
- 30. 在OMNeT ++中使用64位内在函数
你为什么要64位散列?为了更好地避免冲突,或者只是为了填充64位而保留在某处?如果你想避免碰撞的真实机会,我会说你需要更多的比64位:MD5更少的位(如果你不关心安全性方面的问题,SHA256或其他)。否则,只需将填充位添加到32位'qHash'中即可。 – hyde