如何在PHP中生成CRC-8校验和?
发布于 2009-02-03 21:14:35
一定要是CRC8吗?
在PHP.net上,有一个非常简单的CRC16实现和一个本机版本的CRC32。
马利乌斯指出,如果非要用CRC8,我建议从维基百科页面上的伪代码中编写一些代码。
发布于 2010-04-04 05:57:55
function crcnifull ($dato, $byte)
{
static $PolyFull=0x8c;
for ($i=0; $i<8; $i++)
{
$x=$byte&1;
$byte>>=1;
if ($dato&1) $byte|=0x80;
if ($x) $byte^=$PolyFull;
$dato>>=1;
}
return $byte;
}
function crc8 (array $ar,$n=false)
{
if ($n===false) $n=count($ar);
$crcbyte=0;
for ($i=0; $i<$n; $i++) $crcbyte=crcnifull($ar[$i], $crcbyte);
return $crcbyte;
}要将此函数用于二进制字符串,必须先将该二进制字符串转换为数组。这可以像这样实现:
function sbin2ar($sbin)
{
$ar=array();
$ll=strlen($sbin);
for ($i=0; $i<$ll; $i++) $ar[]=ord(substr($sbin,$i,1));
return $ar;
}示例如何使用整个过程:
$crc8=crc8(sbin2ar($packet));https://stackoverflow.com/questions/507041
复制相似问题