Da stimmt aber das Ergebnis nicht mit der anderen funktion aus C# überein.
CRC-16 gibt es ja auch in unterschiedlichen Varianten.
Ich habe mal versucht das C# 1 zu 1 zu übersetzen:
Delphi-Quellcode:
procedure CalculateCrc16(var buffer: array of byte; index: integer);
var
crc: word {UInt16};
i, j: integer;
begin
crc := $FFFF;
for i := 0 to index - 1 do
begin
crc := crc xor buffer[i];
for j := 0 to 7 do
begin
// process each bit
if ((crc and 1) = 1) then
begin
crc := crc shr 1;
crc := crc xor $A001;
end
else
crc := crc shr 1;
end;
end;
// write crc in buffer
buffer[index] := crc div 256;
buffer[index + 1] := crc mod 256;
end;
Er scheint den CRC-Code der ersten
index Bytes zu bereichnen und ihn an die Stelle
index und
index+1 zu schreiben (und das afaik BigEndian).
EDIT: Code compiliert, aber nicht weiter getestet.