Контрольная сумма PHP XOR

У меня есть следующая строка, которая должна иметь контрольную сумму на нем. Как бы я написал логику в 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 — это контрольная сумма, которая была сгенерирована.

0

Решение

Я получил следующую работу, и она дает правильную контрольную сумму (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";

?>
1

Другие решения

Все операторы здесь: http://php.net/manual/en/language.operators.bitwise.php

Но

$a ^ $b

это то, что вы ищете

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector