c# - 将连续的 64 位数字统一哈希为 8 位?

标签 c# hash integer

我正在寻找一种哈希算法,当给定一个 64 位顺序值时,该算法将统一哈希为 8 位。

我不想只使用最低有效字节作为哈希值。

最佳答案

作为 Oli Charlesworth 解决方案的一般情况,您可以选择与 256 互质,并将输入的每个字节预乘以该值,然后将所有值XOR 在一起。您仍然会得到均匀分布,但对于顺序输入,您会得到非顺序输出,例如:

byte result = 0;
int q = 33149;
foreach (byte b in BitConverter.GetBytes(input)) result += (byte)(b * q);

对于 1, 2, 3, 4, 5, 6, ... 它会得到 125, 250, 119, 244, 113, 238, 等等

关于c# - 将连续的 64 位数字统一哈希为 8 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546155/

相关文章:

c# - 您可以从 C# 控制台应用程序中执行另一个 EXE 文件吗?

C# UserPrincipal - ChangePassword 执行策略但 SetPassword 不执行策略?

c# - 是否有用 C# 编写的 Memcached 等效项?

hash - 以 O(1) 时间复杂度获取 Redis 中的最后 20 个哈希项?

php - PHP crypt() 函数的 salt 参数和返回值如何工作?

javascript - 将字符串转换为整数 BigInt

python - 为什么 Python 改变前面有 0 的整数的值?

c# - 扩展方法中的 ILoggerFactory - 生命周期和处置

ruby - 按日期对哈希数组进行分组和求和

java - 有没有办法更改数据元素,以便我的代码基本上在我使用构造函数启动方法时从头开始?