Der Startwert für dein o.g. CRC16 Code ist $ffff. Die berechnete CRC muss dann noch invertiert werden (not), wie es die Routine auch machte (~). Dann solltest du die gleichen Summen erhalten.
Ansonsten der Code vom 1. Beitrag mal portiert:
Delphi-Quellcode:
function ComputeCRC16(
const AData: Pointer; ADataLen: integer): word;
//char *msg, int len)
var
lCheckSum: Word;
// chksum
lDataPtr: PByte;
// *msgchk
begin
lCheckSum := $ffff;
lDataPtr := AData;
while ( ADataLen > 0 )
do
begin
lCheckSum := Hi(lCheckSum)
xor ccittrev_tbl[Lo(lCheckSum)
xor lDataPtr^];
Inc(lDataPtr);
Dec(ADataLen);
end;
result :=
not lCheckSum;
end;
Der Code wurde hier im Beitragseditor geschrieben - kann Fehler enthalten und muss nicht unbedingt funktionieren