我的问题是关于代码,它为字符串生成哈希值,一次求和 4 个字节。它完全有效,但我无法理解这段代码的某些行,即在某些行中执行的想法。因此,我需要一些非常熟悉散列的人的帮助。
好吧,这是完整的代码:
long sfold(String s, int M) {
int intLength = s.length() / 4;
long sum = 0;
for (int j = 0; j < intLength; j++) {
char c[] = s.substring(j * 4, (j * 4) + 4).toCharArray();
long mult = 1;
for (int k = 0; k < c.length; k++) {
sum += c[k] * mult;
mult *= 256;
}
}
char c[] = s.substring(intLength * 4).toCharArray();
long mult = 1;
for (int k = 0; k < c.length; k++) {
sum += c[k] * mult;
mult *= 256;
}
return(Math.abs(sum) % M);
}
这里每个 char 值都转换为长整数类型,对 for 循环的每次迭代的结果求和。我上面提到的这两行可疑的代码如下:
sum += c[k] * mult;
mult *= 256;
好吧,我可以理解整个代码,除了这两行......
1)为什么我们需要变量'mult'?它可能是使用乘法方法进行散列吗?
2) 为什么我们在每次迭代中将“mult”乘以 256?在这种情况下,256 是什么?
如果你们中的一些人遇到过这段代码,或者你知道在这些行中执行的想法,请帮助我理解它:)