作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有两个数组: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/
我是一名优秀的程序员,十分优秀!