crc8校验就是校验包头到内容的长度
function crc8($str)
{
//AA 64 00 32 07 30 FF FF 02 00 00 F6 BB
//将字符串按两个字符分割成数组,也就是一个字节
$data = str_split($str,2);
$hex_array = array_map(function($value) {
return "0x" . $value;
}, $data);
$arr = array_map('hexdec', $hex_array);
$initialValue = 0x55;
$polynomial = 0x07;
$crc = $initialValue;
foreach ($arr as $value) {
$crc ^= $value;
for ($i = 0; $i < 8; $i++) {
if ($crc & 0x80) {
$crc = ($crc << 1) ^ $polynomial;
} else {
$crc <<= 1;
}
}
$crc = ($crc & 0xff);
}
//确保返回的校验结果是一个字节,之前遇到过返回了一个字符5,并不是一个完整的字节,导致16进制字符串不是完整的,出现了问题
if(strlen(dechex($crc)) == 1)
{
return '0'.dechex($crc);
}
return dechex($crc);
}
$hex = 'AA6400320730FFFF020000';
$crc8 = Common::crc8($hex);
$this->writeJson(Status::CODE_OK,$crc8,'校验成功');
通过测验刚好和上面示例中的crc校验匹配上
本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.amdzz.cn
最新评论