16 A5 04 0A 01 A6 00 00 31 00 32 00 33 00 34 00 35
以上数据保存到数组中,数组定义为 buf:array[0..1024] of byte;
现要求获得校验码并保存于后面的两个字节中,上述内容计算出的校码码为:AC 30,最后形成有效的数据如下
16 A5 04 0A 01 A6 00 00 31 00 32 00 33 00 34 00 35 AC 30偶数位校验从第四个字节开始
AC=0A+A6+00+00+00+00+00 奇数位校验从第五个字节开始
30=01+00+31+32+33+34+35   (奇数位校验码)请问用delphi如何实现,谢谢

解决方案 »

  1.   

    var
      xor1,xor2: BYTE;
      i,j: integer;
      b: array[0..18] of byte;
    begin
      b[0]:=$16;
      b[1]:=$A5;
      b[2]:=$04;
      b[3]:=$0A;
      b[4]:=$01;
      b[5]:=$A6;
      b[6]:=$00;
      b[7]:=$00;
      b[8]:=$31;
      b[9]:=$00;
      b[10]:=$32;
      b[11]:=$00;
      b[12]:=$33;
      b[13]:=$00;
      b[14]:=$34;
      b[15]:=$00;
      b[16]:=$35;
      xor1:=0;
      xor2:=0;
      for i:=3 to 16 do
      begin
        j:= i mod 2;
        if j=0 then
          xor1:= xor1 xor b[i]
        else
          xor2:= xor2 xor b[i];
      end;
      b[17]:= xor2;
      b[18]:= xor1;
    end;