Ich verstehe die Anleitung so: Du addierst alle Bytes bis auf das Checksum Byte zusammen. Dabei darfst du nur immer Byte-weise addieren, irgendwelcher Überlauf geht wieder auf 0 + Rest. Wenn du das alles zusammen hast, dann ist die Checksum genau die Differenz die du brauchst, damit durch Addition direkt 0 rauskommt.
Also ein wenig Pseudocode:
Delphi-Quellcode:
function CalcChecksum(const AData: pointer; const ADataSize: integer): Byte;
var
lPtr: PByte;
lCheckSum: Integer;
begin
lPtr := AData;
lCheckSum := 0;
for i := 1 to ADataSize do
begin
Inc(lCheckSum, lPtr^);
Inc(lPtr);
lCheckSum := lCheckSum mod 256;
end;
result := 256 - lCheckSum;
end;
Die übergebenen Datengröße müssen die reinen Rohdaten sein, ohne das Feld für die Checksumme (oder wenn doch mit Checksummenfeld, dann muss dieses mit 0 gefüllt sein).
Diese Methode gibt's vor allem bei seriellen Protokollen und ein paar Dateiformaten.