xxHash转换导致哈希太长

时间:2015-06-18 09:43:00

标签: c# bytearray bitconverter

我正在使用xxHash为C#散列值以保持一致性。 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时,它会失败。

以下是我得到的例外情况:

  

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

3 个答案:

答案 0 :(得分:8)

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

var hasher = new xxHash(32);

有效散列大小为32和64。

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

答案 1 :(得分:2)

添加新的答案是因为当前来自Brandon Dahler的xxHash实现使用哈希工厂,您可以在其中使用包含hashsize和种子的配置来初始化工厂:

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;

答案 2 :(得分:0)

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