私の質問は、文字列のハッシュ値を生成し、一度に 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 ループの各反復で結果が合計されます。私が上で言及した疑わしい 2 行のコードは次のとおりです。
sum += c[k] * mult;
mult *= 256;
ええと、この2行を除いて、コード全体を理解できます...
1) なぜ変数 'mult' が必要なのですか? ハッシュに掛け算方式を使っているのではないでしょうか?
2) 各反復で 'mult' を正確に 256 倍するのはなぜですか? この場合の 256 は何ですか?
あなたの何人かがこのコードに直面したか、これらの行で実行されるアイデアを知っているなら、私もそれを理解するのを手伝ってください:)