crc校验学习CRC-CCITT 多项式为:G(x)= X16+X12+X5+1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 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   懒猫~  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示