function
CalCRC16(Buf: PByteArray; len: integer): Word;
const
table:
array
[
0
..
255
]
of
WORD
=
(
$
0000
, $C0C1, $C181, $
0140
, $C301, $03C0, $
0280
, $C241, $C601, $06C0, $
0780
,
$C741, $
0500
, $C5C1, $C481, $
0440
, $CC01, $0CC0, $0D80, $CD41, $0F00, $CFC1,
$CE81, $
0E40
, $0A00, $CAC1, $CB81, $0B40, $C901, $09C0, $
0880
, $C841, $D801,
$18C0, $
1980
, $D941, $1B00, $DBC1, $DA81, $1A40, $
1E00
, $DEC1, $DF81, $1F40,
$DD01, $1DC0, $1C80, $DC41, $
1400
, $D4C1, $D581, $
1540
, $D701, $17C0, $
1680
,
$D641, $D201, $12C0, $
1380
, $D341, $
1100
, $D1C1, $D081, $
1040
, $F001, $30C0,
$
3180
, $F141, $
3300
, $F3C1, $F281, $
3240
, $
3600
, $F6C1, $F781, $
3740
, $F501,
$35C0, $
3480
, $F441, $3C00, $FCC1, $FD81, $3D40, $FF01, $3FC0, $
3E80
, $FE41,
$FA01, $3AC0, $3B80, $FB41, $
3900
, $F9C1, $F881, $
3840
, $
2800
, $E8C1, $E981,
$
2940
, $EB01, $2BC0, $2A80, $EA41, $EE01, $2EC0, $2F80, $EF41, $2D00, $EDC1,
$EC81, $2C40, $E401, $24C0, $
2580
, $E541, $
2700
, $E7C1, $E681, $
2640
, $
2200
,
$E2C1, $E381, $
2340
, $E101, $21C0, $
2080
, $E041, $A001, $60C0, $
6180
, $A141,
$
6300
, $A3C1, $A281, $
6240
, $
6600
, $A6C1, $A781, $
6740
, $A501, $65C0, $
6480
,
$A441, $6C00, $ACC1, $AD81, $6D40, $AF01, $6FC0, $
6E80
, $AE41, $AA01, $6AC0,
$6B80, $AB41, $
6900
, $A9C1, $A881, $
6840
, $
7800
, $B8C1, $B981, $
7940
, $BB01,
$7BC0, $7A80, $BA41, $BE01, $7EC0, $7F80, $BF41, $7D00, $BDC1, $BC81, $7C40,
$B401, $74C0, $
7580
, $B541, $
7700
, $B7C1, $B681, $
7640
, $
7200
, $B2C1, $B381,
$
7340
, $B101, $71C0, $
7080
, $B041, $
5000
, $90C1, $
9181
, $
5140
, $
9301
, $53C0,
$
5280
, $
9241
, $
9601
, $56C0, $
5780
, $
9741
, $
5500
, $95C1, $
9481
, $
5440
, $9C01,
$5CC0, $5D80, $9D41, $5F00, $9FC1, $
9E81
, $
5E40
, $5A00, $9AC1, $9B81, $5B40,
$
9901
, $59C0, $
5880
, $
9841
, $
8801
, $48C0, $
4980
, $
8941
, $4B00, $8BC1, $8A81,
$4A40, $
4E00
, $8EC1, $8F81, $4F40, $8D01, $4DC0, $4C80, $8C41, $
4400
, $84C1,
$
8581
, $
4540
, $
8701
, $47C0, $
4680
, $
8641
, $
8201
, $42C0, $
4380
, $
8341
, $
4100
,
$81C1, $
8081
, $
4040
);
var
i: integer;
begin
Result :
=
$FFFF;
for
i :
=
0
to
len
-
1
do
Result :
=
Hi(Result)
xor
Table[Lo(Result)
xor
Buf[i]];
end
;
//
测试
var
vBA: TByteArray;
begin
vBA[
0
] :
=
1
;
vBA[
1
] :
=
4
;
vBA[
2
] :
=
0
;
vBA[
3
] :
=
9
;
vBA[
4
] :
=
0
;
vBA[
5
] :
=
2
;
ShowMessage(IntToHex(CalCRC16(@vBA,
6
),
2
);
end
;