Ich habe mal die String-Nach-CRC16 überarbeitet aber bekomme dennoch andere Ergebnisse.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
s: String;
buff: packed array of byte;
i: Integer;
begin
case RadioGroup1.ItemIndex of
0: begin // Input ist String
s := LabeledEdit1.Text;
SetLength(buff, Length(s));
for i := 0 to (Length(s))-1 do buff[i] := Byte(Ord(s[i+1]));
LabeledEdit2.Text := (IntToHex(CalcCRC16(buff), 4));
end;
1: begin // Input ist Hex-Kette als String (Beispiel 020D000A413068656C6C6F)
s := LabeledEdit1.Text;
SetLength(buff, Length(s) div 2);
for i := 0 to (Length(s) div 2)-1 do
buff[i] := Byte(StrToInt('$'+s[i*2+1]+s[i*2+2]));
LabeledEdit2.Text := (IntToHex(CalcCRC16(buff), 4));
end;
end;
end;
für String "020D000A413068656C6C6F" erhalte ich "A881" und als Hex-Kette kommt "199A" raus.
Bestimmt mach ich irgendwo noch mehr falsch.
[Edit]
Ob Hex-Kette überhaupt funktioniert hab ich so getestet
In meine String-Eingabe entweder Wert "1" oder "31", als String oder als Hex, beides resultiert in "947E"
[/Edit]