function TForm1.GetCrc16(Buf:Array of Byte):LongInt;
var
CrcVal:LongInt;
i:integer;
begin
CrcVal:=$ffff;
for i:= 0 to Length(Buf)-1 do
CrcVal:=CrcArcTab[Byte(CrcVal xor Buf[i])] xor ((CrcVal shr 8) and $00FF);
Result:=not CrcVal;
end;
{calculate CRC32 Checksum, CRC is default $FFFFFFFF, after calc you must inverse Result with NOT}
function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord;
function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord; assembler;
asm
AND EDX,EDX
JZ @Exit
JCXZ @Exit
PUSH EBX
@Start:
MOVZX EBX,AL
XOR BL,[EDX]
SHR EAX,8
XOR EAX,CS:[EBX * 4 + OFFSET @CRC32]
INC EDX
DEC ECX
JNZ @Start
POP EBX
@Exit: RET