Der CRC16 Algo ist Standard, der Start Seed value wäre nur interessant gewesen, den hättest du den zig verschiedenen Implementationen u.a. hier im Forum einsetzen können. Ansonsten anstatt einem Array of Byte wäre es eigentlich ein Pointer auf ein Byte in der Funktion.
Delphi-Quellcode:
function CalcCRC16(
const buf_ptr: Pointer; len: LongWord;
const value: boolean): LongWord;
var
lData: PByte;
lCRC: Word;
i: Integer;
begin
lCRC := CRC_16_SEED;
lData := buf_ptr;
if value
then
begin
Inc(lData);
Dec(len);
end;
for i := 1
to len
do
begin
lCRC := crc_16_1_step(lCRC, lData^);
Inc(lData);
end;
result := lCRC
xor CRC_16_SEED;
end;