【发布时间】:2013-06-29 20:58:42
【问题描述】:
我正在使用boost::hash 来获取字符串的哈希值。
但它在 Windows 32 位和 Debian 64 位系统上为相同的字符串提供不同的哈希值。
那么,无论平台如何,我如何使用boost::hash 获得相同的哈希值(32 位或 64 位)?
【问题讨论】:
-
假设,如果你依赖于总是获得相同的哈希值并且 boost 稍微改变他们的算法会发生什么?
-
@Mark B,它可能会导致可移植性问题。在最简单的情况下,您可能希望将来自不同平台的散列字符串收集到一个数据结构中,并且桶分布是随机的
-
是否有可能在其中一种情况下使用 unicode 而在另一种情况下不使用?
-
boost:hash(hash_value) 返回 std:size_t,所以在 64 位系统中返回 64 位长,在 32 位系统中返回 32 位长。
-
我刚刚看了
boost::hash的实现。在实践中,除了一个空字符串(它会散列为 0),你几乎可以保证得到不同的结果,具体取决于size_t的大小。