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 证明数据正确。

posted on 2024-07-10 15:02  懒猫~  阅读(4)  评论(0编辑  收藏  举报

导航