我对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。