php crc16校验算法,PHP串口通信中计算crc16校验码
最近使用PHP開發(fā)串口通信業(yè)務(wù),在發(fā)送485Modbus命令時,基本都要計算CRC16校驗碼。網(wǎng)上搜索了很多文章,很多都計算的不對。本文記錄搜索到的正確的計算方法。
代碼如下:/**
*?crc16計算
*?傳入字符串格式:001624180101
*?返回值格式:[高8位,低8位]
*/
function?crc16($string)
{
$string?=?pack('H*',?$string);
$crc?=?0xFFFF;
for?($x?=?0;?$x?
$crc?=?$crc?^?ord($string[$x]);
for?($y?=?0;?$y?
if?(($crc?&?0x0001)?==?0x0001)?{
$crc?=?(($crc?>>?1)?^?0xA001);
}?else?{
$crc?=?$crc?>>?1;
}
}
}
$high8?=?str_pad(dechex(floor($crc?/?256)),?2,?'0',?STR_PAD_LEFT);
$low8?=?str_pad(dechex($crc?%?256),?2,?'0',?STR_PAD_LEFT);
return?[$high8,?$low8];
}
計算方法返回crc16校驗碼的高8位和低8位結(jié)果數(shù)組,在實際開發(fā)中,需要根據(jù)具體的串口協(xié)議進(jìn)行高低位組合。
總結(jié)
以上是生活随笔為你收集整理的php crc16校验算法,PHP串口通信中计算crc16校验码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 备份格式dmp解析,Ora
- 下一篇: oracle bi publisher