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

我可以使用int32将结果转换为BitConverter。这是我尝试过的:

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


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

这是我得到的例外:


  目标数组的长度不足以复制集合中的所有项目。检查数组索引和长度。

最佳答案

构造xxHash对象时,需要提供一个hashsize:

var hasher = new xxHash(32);


有效的哈希大小为32和64。

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

10-04 14:19