CRC8签入PHP

CRC8签入PHP,php,checksum,crc,Php,Checksum,Crc,如何在PHP中生成CRC-8校验和?它必须是CRC8吗 在PHP.net上有一个非常简单的实现和的本机版本 如果它必须是CRC8,我建议您使用马吕斯指出的维基百科页面上的伪代码进行编码 它必须是CRC8吗 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0; $i<8; $i++) { $x=$byte&1; $byte>>=1; if ($dat

如何在PHP中生成CRC-8校验和?它必须是CRC8吗

在PHP.net上有一个非常简单的实现和的本机版本


如果它必须是CRC8,我建议您使用马吕斯指出的维基百科页面上的伪代码进行编码

它必须是CRC8吗

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;
}
在PHP.net上有一个非常简单的实现和的本机版本


如果它必须是CRC8,我建议您使用马吕斯指出的维基百科页面上的伪代码进行编码

Bob,您的代码不适用于“D$1I 11/14/2006 18:15:00 1634146 3772376 3772344 3772312 3772294 1*”字符串。根据您的计算,该示例中的crc8计算结果为28,而实际结果为57。我希望你仍然遵循这个思路。你能检查一下吗?我想Bob刚刚得到他的代码,甚至没有添加引用,所以我怀疑它是否会被修复。Bob,你的代码对“D$1I 11/14/2006 18:15:00 1634146 3772376 3772344 3772312 3772294 1*”字符串不起作用。根据您的计算,该示例中的crc8计算结果为28,而实际结果为57。我希望你仍然遵循这个思路。请你检查一下,好吗?我想Bob刚刚得到了他的代码,甚至没有添加引用,所以我怀疑它是否会被修复。图书馆,根据MIT许可证由图书馆发布,根据MIT许可证由
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;
}
$crc8=crc8(sbin2ar($packet));