3

我正在使用xxHashC# 来散列值以保持一致性。 ComputeHash返回 a byte[],但我需要将结果存储在 a 中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它时失败。

这是我得到的例外:

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

4

3 回答 3

8

当你构造你的xxHash对象时,你需要提供一个哈希大小:

var hasher = new xxHash(32);

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

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

于 2015-06-18T09:53:02.960 回答
2

添加一个新答案,因为 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;
于 2020-02-16T16:07:13.977 回答
0

BitConverter.ToInt64预计hashedValue有 8 个字节(= 64 位)。您可以手动扩展,然后通过它。

于 2015-06-18T09:51:19.767 回答