我有一个在 [1, 1000] 和字符串中有 3 个整数的结构。
我需要用 32 位数字表示它,以便至少一个字段中不同的两个结构会产生不同的代码,而具有相同内容的结构会始终产生相同的代码。通常整数字段之一将以几个单位增加。这必然会产生不同的代码。
起初,我想将结构字段格式化为常量格式的字符串,然后使用 String 类的 GetHashCode 函数对其进行哈希处理。但是后来我在一些讨论中读到,在相同输入上运行的重复过程不一定会产生相同的哈希输出。首先,在 .NET 4 中这是真的吗?这对我很重要,因为哈希值应该被持久化并在进程运行中保持一致。我还在这里看到了使用素数对应用于每个结构字段的平台 GetHashCode 的结果执行按位运算的建议。但是在这里,显然我不能指望过程运行的一致结果。
如果我使用加密哈希函数,我会超过 32 位。
如果我没有字符串字段,我会将代码组合为来自数字字段的 32 位数组。可能值得用字符串字段 GetHashCode 结果对这样的位数组进行异或吗?我是否会增加在某些输入上重复运行会产生相同哈希输出的机会?
你会建议做什么?