最近在做硬件的升级,由于web端使用的是PHP开发,需要将升级的数据通过TCP发送给终端,而对发送的数据报,需要CRC16的校验.
基于网上有很多CRC16的算法,也根据自行配置参数,但会出现计算出来的值不同.现公布该校验方式,提供给有需要的朋友!(作者原创,转载请保持原有链接).
class QXZ_CRC{
/***
**首页 https://www.qingxinzui.com/
**开发者:陈奎宗
**时间:2020年2月7日 上午2:24:14
**说明:将16进制字符串转成10进数组
***/
private function StringToArray($string){
$bytes = array();
for($x=0;$x
$sys = ”;
if(isset($string[$x]) && isset($string[$x+1])){
$sys = $string[$x].$string[$x+1];
} else {
continue;
}
$sys = hexdec($sys);
$bytes[] = $sys;
}
return $bytes;
}
/***
**首页 https://www.qingxinzui.com/
**开发者:陈奎宗
**时间:2020年2月7日 上午3:11:31
**说明:16禁止的字符串转数组
***/
private function StringToArrayValue($string){
$bytes = array();
for($x=0;$x
$sys = ”;
if(isset($string[$x]) && isset($string[$x+1])){
$sys = $string[$x].$string[$x+1];
} else {
continue;
}
$bytes[] = $sys;
}
return $bytes;
}
/***
**首页 https://www.qingxinzui.com/
**开发者:陈奎宗
**时间:2020年2月7日 上午2:53:02
**说明:crc16主方法的参数$outputReverse = true的时候 对输出的数据进行反转 比如获取的CRC=ABCD 那么反转之后是CD AB,注:是2个字节[数组下标]的反转
**
***/
private function reverseString($str) {
$string = ”;
for($i=0;$i
if(isset($str[$i]) && isset($str[$i+1])){
$string = $