crc校验学习CRC-CCITT 多项式为:G(x)= X16+X12+X5+1
function GetCRCWord(const DataStr: string): Word;
var
Crc16: word;
aByte: Byte;
tmpStr: string;
i, j: integer;
begin
Crc16 := $0000;
if DataStr = '' then Exit;
tmpStr := DataStr + #0#0;
for i := 1 to Length(tmpStr) do
begin
aByte := Ord(tmpStr[i]);
for j := 0 to 7 do
begin
if (crc16 and $8000) <> 0 then // 判断 crc16 首位是否等于 1
begin
crc16 := (Crc16 shl 1) xor (aByte shr 7);
crc16 := crc16 xor $1021;
end
else crc16 := (Crc16 shl 1) xor (aByte shr 7);
aByte := aByte shl 1;
end; // for
end;
Result := Crc16;
end;
暂时还没有验证方法:
将接收的数据,crc码交换高低位,重新进行CRC校验,如果得到0 证明数据正确。
浙公网安备 33010602011771号