Hash


crc 命令

crc命令是计算8/16/32字节CRC的系统命令形式如下。

此命令的返还值是计算的CRC值。

参数 说明
bits 8 - 8 bits CRC
16 - 16 bits CRC
32 - 32 bits CRC
$msg 需要计算CRC的原本数据
init CRC初始值
省略此项目基本值为:
8 bits - ff, 16 bits - 1d0f, 32 bits - ffffffff
div 是计算CRC时使用的divisor(polynomial)。
忽略此项目时基本值是:
8 bits - e0, 16 bits - 1021, 32 bits - edb88320
msb/lsb 是CRC计算顺序。
msb是按byte数据的上位->下位字节顺序计算,
lsb是按下位->上位顺序计算。
省略时基本值是I
8 bits - lsb, 16 bits - msb, 32bits - lsb

下面是各个CRC类型计算CRC的代码示例。

<?php

$string = "123456789";

printf("CRC-16-ANSI : %04x\r\n", (int)system("crc 16 %1 0000 a001 lsb", $string));

printf("CRC-16-Modbus : %04x\r\n", (int)system("crc 16 %1 ffff a001 lsb", $string));

printf("CRC-CCITT FFFF: %04x\r\n", (int)system("crc 16 %1 ffff 1021 msb", $string));

printf("CRC-CCITT 1D0F: %04x\r\n", (int)system("crc 16 %1 1d0f 1021 msb", $string));

printf("CRC-CCITT XModem : %04x\r\n", (int)system("crc 16 %1 0000 1021 msb", $string));

$crc16_out = (int)system("crc 16 123456789 %1 8408 lsb", $string);
$crc16_out = bin2int(int2bin($crc16_out, 2, true), 0, 2);
printf("CRC-CCITT Kermit : %04x\r\n", $crc16_out);

$crc16_out = (int)system("crc 16 123456789 ffff 8408 lsb");
$crc16_out = $crc16_out ^ 0xffff;
printf("CRC-CCITT PPP    : %04x\r\n", $crc16_out);

$crc16_out = ~(int)system("crc 16 %1 0000 a6bc lsb", $string);
$crc16_out = bin2int(int2bin($crc16_out, 2, true), 0, 2);
printf("CRC-16-DNP       : %04x\r\n", $crc16_out);

?>