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