xx哈希转换导致哈希太长

本文关键字:哈希太 哈希 转换 xx | 更新日期: 2023-09-27 17:56:57

我正在使用 C# 的 xxHash 来哈希值以保持一致性。 ComputeHash返回一个byte[],但我需要将结果存储在long中。

我能够使用 BitConverter 将结果转换为int32.这是我尝试过的:

var xxHash = new System.Data.HashFunction.xxHash();
byte[] hashedValue = xxHash.ComputeHash(Encoding.UTF8.GetBytes(valueItem));
long value = BitConverter.ToInt64(hashedValue, 0);

当我使用int时,这工作正常,但是当我更改为ToInt64时,它会失败。

这是我得到的例外:

目标数组不够长,无法复制集合中的所有项。检查数组索引和长度。

xx哈希转换导致哈希太长

构造xxHash对象时,需要提供哈希大小:

var hasher = new xxHash(32);

有效哈希大小为 32 和 64。

有关来源,请参阅 https://github.com/brandondahler/Data.HashFunction/blob/master/src/xxHash/xxHash.cs。

添加一个新答案,因为 Brandon Dahler 的 xxHash 的当前实现使用哈希工厂,您可以使用包含哈希大小和种子的配置初始化工厂:

using System.Data.HashFunction.xxHash;
//can also set seed here, (ulong) Seed=234567
xxHashConfig config = new xxHashConfig() { HashSizeInBits = 64 };
var factory = xxHashFactory.Instance.Create(config);
byte[] hashedValue = factory.ComputeHash(Encoding.UTF8.GetBytes(valueItem)).Hash;

>BitConverter.ToInt64期望hashedValue有8个字节(= 64位)。您可以手动扩展,然后传递它。