У меня есть следующая строка, которая должна иметь контрольную сумму на нем. Как бы я написал логику в PHP (или функцию), чтобы добиться этого. Вот пример, который я имею из документации.
1 байт, это контрольная сумма xor, например:
если пакет: 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 — это контрольная сумма, которая была сгенерирована.
Я получил следующую работу, и она дает правильную контрольную сумму (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";
?>
Все операторы здесь: http://php.net/manual/en/language.operators.bitwise.php
Но
$a ^ $b
это то, что вы ищете