php crc16计算,如何在PHP HEX中计算CRC16 CCITT?

我正在尝试使用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

我试过用了

没有成功,CRC 16计算返回:E6 F4而不是a0 77

当我查找时,我得到了正确的Hex信息:

100000000000000012510908001800040214000c000c021c0002000000000000

能否帮我弄清楚如何获得十六进制值字符串的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的输出.

标签:php,hex,crc,crc16

来源: https://codeday.me/bug/20190628/1317337.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值