Der Code sieht nun so aus:
Delphi-Quellcode:
function CalculateChecksum(s: string): Longint;
var
i, sum: integer;
checkchar : Char;
begin
sum := 0;
for i := 0 to length(s)-1 do
inc(sum, ord(s[i]));
checkchar := char((- sum) and $FF);
Result := Ord(checkchar);
end;
und liefert bei 3 bytes den korrekten Wert, also FF1000 -> F1 oder FF3000 -> D1. Sobald der String jedoch länger wird, stimmt es nicht mehr:
- FF64020006 ergibt 9B, sollte 95 sein
- FF900200FF ergibt 6F, sollte 70 sein
- FFD20400000005 ergibt 2B, sollte 26 sein
Was muss man noch ändern?