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 32 33 34 35 36 37 38 39
|
// unsigned short crc( unsigned char *p, unsigned short length){
fuction crc(p: PAnsiChar; len: Integer): word;
// const unsigned short generator_polynom = 0x8810;
// int i, carry;
// unsigned short sum;
var
generator_polynom: Word;
x, i, carry: Integer;
num: Word;
begin
generator_polynom := $8810;
// for (sum = 0; length > 0 ; length -- , p++){
sum := 0;
for x := 0 to length - 1 do
begin
// sum ^= (unsigned short) *p << 8 ;
sum := sum xor (ord(p[x]) shl 8);
// for( i = 0 ; i<8 ; i++){
for i := 0 to 7 do
begin
// if (carry = ((sum & 0x8000) != 0))
carry := Ord(sum and $8000 <> 0);
if carry <> 0 then
begin
// sum ^= generator_polynom;
sum := sum xor generator_polynom;
// }
end;
// sum = (sum <<1) + carry;
sum := (sum shl 1) + carry;
// }
end;
// }
end;
// return sum;
Result := sum;
//}
end; |