什么是十六进制字符串的最佳哈希函数?

时间:2014-04-02 13:08:52

标签: c++ hash hex

我希望使用哈希函数对存储在字符串中的一组十六进制值进行编码。由于十六进制“'字母''仅由16个字母组成,因此碰撞量最小的最佳哈希算法是什么?

1 个答案:

答案 0 :(得分:1)

有点过于笼统的问题,因为你遗漏了哈希函数的任何约束,和/或你将要用哈希做什么。 (在旁注中,散列不是编码)

话虽如此,有一个16个字母的字母表,你需要4位来存储每个字母(即你可以在每两个字母上建立一个XOR和,塞进一个字节,得到一个8位散列。
当然,也可以扩展到任何其他字长(但你遗漏了太多的信息)

例如这样:

  

uint8_t
  hexhash(const char *str)
  {
  uint8_t res = 0;
  while (*str && *(str+1)) {
  res ^= (fromchar(*str) << 4) | fromchar(*(str+1));
  str += 2; //编辑:在原来的回复中忘记了这一点   }
  return res;
  }

(其中'fromchar'是一个函数,为'0'返回0,1为'1',...,15为'f')