使用unpack您可以将字符的整数值数组作为数组获取。请注意,索引从 1 开始,而不是 0。
例子:
$contents = "addadda";
$ords = array_values(unpack("C*", $contents)); // make 0-based array
$a = 1; $b = 0; // hash low and high words
$len = 4; // the window length
foreach ($ords as $i => $ord) {
if ($i < $len) {
$a = ($a + $ord) % 65521;
$b = ($b + $a) % 65521;
} else {
$removed = $ords[$i - $len];
$a = ($a + $ord - $removed + 65521) % 65521;
$b = ($b + $a - 1 - $len * $removed + 65521) % 65521;
}
if ($i >= $len - 1) {
echo $i - $len + 1, "..", $i, ": ",
substr($contents, $i - $len + 1, $len), " => ",
$b * 65536 + $a, "\n";
}
}
结果:
0..3: adda => 64815499
1..4: ddad => 65405326
2..5: dadd => 65208718
3..6: adda => 64815499