PHP 异或校验和

PHP XOR Checksum

我有以下字符串需要对其进行校验和。我将如何在 PHP (或函数)中编写逻辑来实现这一点。这是我从文档中获得的示例。

1 bytes, it is xor checksum, for example: if the packet is: 29 29 B1 00 07 0A 9F 95 38 0C 82 0D 0x82= 29 xor 29 xor B1 xor 00 xor 07 xor 0A xor 9F xor 95 xor 38 xor 0C

上面字符串中,29 29 B1 00 07 0A 9F 95 38 0C (82) 0D是生成的校验和。

所有运算符都在这里:http://php.net/manual/en/language.operators.bitwise.php

但是

$a ^ $b

是你要找的

我得到了以下工作并且它给出了正确的校验和 (130, 0x82) 所以它很有希望...您可以连接下面的一些语句以获得稍微更好的性能,我将操作分开以便于阅读。

<?php

// Input string. Checksum to be generated over the first 10 elements. 
$string = '29 29 B1 00 07 0A 9F 95 38 0C 82 0D';

// Initial checksum
$checksum = 0;

// Split into chunks and process first 10 parts
$parts = explode(' ', $string, 11);
for ($i = 0; $i < 10; $i++) {
    $part = $parts[$i];
    $nr = hexdec($part);
    $checksum ^= $nr;
}

// Done, bring back checksum into 0..0xff range
$checksum &= 0xff;
echo "Got checksum: ", $checksum, "\n";

?>