stm8s103 发表于 2010-8-3 14:36:01

C语言的CRC8函数,怎么改成delphi的?

C语言的CRC8函数,怎么改成delphi的?


uint8 crc8_ibutton_update(uint8 crc,uint8 data)
{
        uint8 i;

        crc = crc ^ data;
        for (i = 0; i < 8; i++)
        {
                if (crc & 0x01)
                        {
                        crc = (crc >> 1) ^ 0x8C;
                        }
                else
                        {
                        crc >>= 1;
                        }
        }

        return crc;
}


uint8 crc8_ibutton_check(const uint8 *data,uint16 size)
        {
        uint8 crc = 0;

        for (uint16 i = 0; i < size; i++)
        {
                crc = crc8_ibutton_update(crc, data);
        }

        return crc;
}

stm8s103 发表于 2010-8-3 15:24:13

Function crc8_ibutton_update(crc : Byte; data : Byte) : Byte;
Var
i: Byte;
begin
crc := crc xor data;

for i := 0 to 8 - 1 do
begin

   if((crc and $1 )<>0)    then
      crc := (crc shr 1) xor $8C
   else
      crc := crc shr 1;
end;
result := crc;
end;

//注意数组的下标,从0开始
Function crc8_ibutton_check(data : array of Byte; size : Word) : Byte;
var
crc:Byte;
i:Word;
begin
crc :=0;

for i := 0 to size - 1 do
crc := crc8_ibutton_update(crc,data);

result:= crc;
end;

SkyGz 发表于 2010-8-3 15:27:52

Function Crc_8n(p : array of BYTE; len : BYTE) : Byte;
Var
j, cbit, aout, crc, crc_a, crc_b : Byte;
i : integer;
begin
crc := 0;
i := 0;

// 取移位的位
repeat
   crc_a := p;
    inc(i);
   j := 8;
   cbit := 1;
    repeat
      crc_b := crc_a;
   crc_b := crc_b xor crc; // ?????
   aout := crc_b and cbit;
   if aout<>0 then begin
      crc := crc xor $18; // ?????
      crc := crc shr 1;
      crc := crc or $80;
   end else begin
       crc := crc shr 1;
   end;
   crc_a := crc_a shr 1;
      dec(j);
    until j = 0;
    dec(len);
until len = 0;

result := crc;
end;

electricit 发表于 2010-8-3 15:55:04

我曾发了一个贴子,无人问津,里面有DELPHI计算各种校验的代码,

xrwf_2009 发表于 2011-8-2 17:16:06

delphi 我正好也要这样该,一不小心就搜到这里了
页: [1]
查看完整版本: C语言的CRC8函数,怎么改成delphi的?