CコードをPHPに変換するのに助けが必要です。以下はCコードです。
static const U16 crctab16[] = { 0x0000, 0x1189, ... };
U16 GetCrc16(const U8* pData, int nLength)
{
U16 fcs = 0xffff;
while(nLength > 0)
{
fcs = (fcs >> 8) ^ crctab16[fcs ^ *pData) & 0xff];
nLength--; pData++;
}
return ~fcs;
}
これまでに変換できた次のPHPコードがあります。
$crctab16 = array(0x0000, 0x1189, ... );
function getCrc16($pData)
{
$hexdata = pack('H*',$pData);
$nLength = strlen($hexdata);
$fcs = 0xFFFF;
$pos = 0;
while($nLength > 0)
{
$fcs = ($fcs >> 8) ^ $crctab16[($fcs ^ $hexdata[$pos]) & 0xFF];
$nLength--;
$pos++;
}
return ~$fcs;
}
次のコードを実行しようとしました。
$str = "0A1344010400010005";
var_dump(getCrc16($str));
var_dump(bin2hex(getCrc16($str))); // result supposed to be 08 45
間違った結果を示しているようです。他の値に置き換えようとする$str
と、結果は常に同じになります。
PHPコードに何か問題があるのではないかと思います。しかし、その原因がわからないようです。