xxHash 转换导致散列太长
xxHash convert resulting in hash too long
我正在为 C# 使用 xxHash
来散列值以确保一致性。
ComputeHash
returns一个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
时,它失败了。
这是我得到的异常:
Destination array is not long enough to copy all the items in the collection. Check array index and length.
BitConverter.ToInt64
期望 hashedValue
有 8 个字节(= 64 位)。您可以手动扩展,然后传递它。
构建 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;
我正在为 C# 使用 xxHash
来散列值以确保一致性。
ComputeHash
returns一个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
时,它失败了。
这是我得到的异常:
Destination array is not long enough to copy all the items in the collection. Check array index and length.
BitConverter.ToInt64
期望 hashedValue
有 8 个字节(= 64 位)。您可以手动扩展,然后传递它。
构建 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;