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;
} 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; 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; 我曾发了一个贴子,无人问津,里面有DELPHI计算各种校验的代码, delphi 我正好也要这样该,一不小心就搜到这里了
页:
[1]