Die Checksumme bezieht sich auf Bytes, somit wird bei der Addition mit einem Überlauf gerechnet.
Delphi-Quellcode:
function CheckSum(const AData: array of byte): byte;
var
lChecksum: byte;
i: integer;
begin
lChecksum := 0;
for i := low(AData) to high(AData) do
lChecksum := (integer(lChecksum) + AData[i]) mod 256;
result := lChechsum xor $ff;
end;
/EDIT: Integer-Typecast wohl nicht nötig, aber zur Sicherheit...
Ansonsten erweitert für unendlich viele Daten anstatt nur einem Datenbyte...
Aufruf z.B.:
letztesByte := CheckSum([$04, $fe, $ff]);
Alternativ könnte man es noch umschreiben auf einen typenlosen Parameter und Größenangabe...