gpt4 book ai didi

c++ - 适当的散列函数来散列随机二进制字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:35 24 4
gpt4 key购买 nike

我有两个数组:char data1[length] 其中长度是 8 的倍数,即长度可以是 8、16,24 ... 该数组包含从以二进制模式打开的文件中读取的二进制数据。我将继续从文件中读取,每次读取时,我都会将读取的值存储在哈希表中。该二进制数据的分布具有随机分布。我想对每个数组进行哈希处理并将它们存储在哈希表中,以便能够再次查找具有特定数据的字符。什么是完成此任务的良好散列函数。谢谢

请注意,我是用 C++ 和 C 编写的,因此您选择的任何语言都可以提供解决方案。

最佳答案

如果你读取的数据是8字节长,而且真的是随机分布的,而你的hashcode需要是32位的,那么这个呢:

uint32_t hashcode(const unsigned char *data) {
uint32_t hash = 0;
hash ^= get_uint32_le(data + 0);
hash ^= get_uint32_le(data + 4);
return hash;
}

uint32_t get_uint32_le(const unsigned char *data) {
uint32_t value = 0;
value |= data[0] << 0;
value |= data[1] << 8;
value |= data[2] << 16;
value |= data[3] << 24;
return value;
}

如果您需要更快的速度,如果您可以保证 data 始终正确对齐以解释为 const uint32_t *,则此代码可能会更快。

关于c++ - 适当的散列函数来散列随机二进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com