Как вычислить CRC16 CCITT в PHP HEX?

Я пытаюсь использовать функцию PHP CRC16 CCITT для вычисления контрольной суммы.

Устройство отправляет мне ПАКЕТ с включенной контрольной суммой:

10 00 00 00 00 00 00 00 12 51 09 08 00 18 00 04 02 14 00 0c 00 0c 02 1c 00 02 00 00 00 00 00 00 a0 77

Контрольная сумма заканчивается: a0 77

Я пробовал использовать

Как вычислить crc16 в php

Преобразование C в PHP для функции CRC16

Без успеха CRC 16 Calculations возвращаются: E6 F4 вместо a0 77

Я получаю правильную информацию о Hex, когда я просматриваю:

100000000000000012510908001800040214000c000c021c0002000000000000

на веб-сайте http://www.lammertbies.nl/comm/info/crc-calculation.html, но я не могу воспроизвести его. (обязательно выберите тип ввода для HEX)

Не могли бы вы помочь мне выяснить, как получить crc16 CCITT строки шестнадцатеричных значений

100000000000000012510908001800040214000c000c021c0002000000000000

Я ищу контрольную сумму a0 77

Я смог создать такую ​​же контрольную сумму с реализацией, как показано ниже:

 define('CRC16POLYN', 0x1021); function CRC16Normal($buffer) { $result = 0xFFFF; if (($length = strlen($buffer)) > 0) { for ($offset = 0; $offset < $length; $offset++) { $result ^= (ord($buffer[$offset]) << 8); for ($bitwise = 0; $bitwise < 8; $bitwise++) { if (($result <<= 1) & 0x10000) $result ^= CRC16POLYN; $result &= 0xFFFF; } } } return $result; } echo dechex(CRC16Normal(hex2bin('100000000000000012510908001800040214000c000c021c0002000000000000'))); 

Выше выдает a077 на выходе.

Фрагмент кода, найденный на https://forums.digitalpoint.com/threads/php-define-function-calculate-crc-16-ccitt.2584389/