【问题标题】:Hash function for indices greater than 64-bits?大于 64 位的索引的哈希函数?
【发布时间】:2013-10-21 18:41:04
【问题描述】:

根据 C++ 标准,哈希函数 std::tr1::hash 计算范围为 64 位的哈希值(如果我错了,请纠正我)。但出于好奇,是否有任何机制可以生成范围大于 64 位的哈希值。我的问题可能看起来很奇怪,因为我们使用的整个内存都在 64 位范围内,但我想知道我们如何计算(比如说)80 位大小的哈希值?

编辑:我的错,我假设是 64 位实现。

【问题讨论】:

  • 您必须定义自己的哈希数类型(80 位)和自己的哈希函数。我不确定 C++11 是否在 32 位实现上提供 64 位哈希。还可以查看cryptographic hash functions,例如 MD5 或 SHA1
  • 是的,加密散列函数可以完成这项工作,但没有任何非加密散列函数(并且也是标准化的)可以完成这项工作吗?
  • 你应该解释为什么你想要大的散列......为了什么?请解释为什么 size_t 哈希不符合您的需求!
  • 所以我的密钥类型是无符号字符数组,它本身就是加密函数的输出。而且我想避免再次调用非加密哈希函数(在这种情况下是多余的)。

标签: c++ memory hash hashcode tr1


【解决方案1】:

C++11 中的各种散列函数(我想是对应的 到 TR1) 将哈希值计算为 size_t,其大小 取决于实现(但对于 32 位将是 32 位 构建,64 位构建 64 位)。如果你需要一个哈希 更大的尺寸,那么您必须自己计算;你 甚至可能必须定义一个更大的整数类型来支持 计算它。 (您不能在 如果 size_t 只有 64 位,则为 size_t。)

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2016-02-06
    • 2012-03-15
    相关资源
    最近更新 更多