加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHP HEX中计算CRC16 CCITT?

发布时间:2020-12-13 16:56:21 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用 PHP CRC16 CCITT函数来计算校验和. 设备发送给我一个包含Checksum的PACKET: 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 我试过用了 How to calculate cr
我正在尝试使用 PHP CRC16 CCITT函数来计算校验和.

设备发送给我一个包含Checksum的PACKET:

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

我试过用了

How to calculate crc16 in php

Convert C to PHP for CRC16 Function

没有成功,CRC 16计算返回: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')));

上面给出了a77的输出.

在https://forums.digitalpoint.com/threads/php-define-function-calculate-crc-16-ccitt.2584389/上找到的代码段

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读