首页 > 解决方案 > 如何向哈希码添加额外信息?

问题描述

给定一个字节数组,有几种众所周知的好算法可用于计算哈希码,例如 FNV 或 MD5。(这里不讨论密码学,只是通用哈希码。)

假设您拥有的是一个字节数组加上一个额外的信息,一个小整数(它不在内存中的数组旁边),并且您想要一个基于整个批次的哈希码。最好的方法是什么?例如,可以获取数组的哈希码并将其添加到小整数,或者异或。但是有更好的方法吗?

标签: algorithmhashhashcode

解决方案


我认为,更简单和有效的方法 - 只需用你的小值初始化“散列”累加器,然后通过普通方式计算散列。以下示例说明了我的方法,我们从 int 和 C 样式字符串计算哈希:

uint32_t hash(const char *str, uint32_t x) {
  char c;
  while((c = *str++) != 0)
      x = ((x << 5) | (x >> (32 - 5))) + c;
  return x ^ (x >> 16);
}

推荐阅读