我正在尝试使用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
我试过用了
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/上找到的代码段
标签:php,hex,crc,crc16 来源: https://codeday.me/bug/20190628/1317337.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。