Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#4

Re: BDV001 Protokoll und CheckSum

  Alt 18. Jan 2008, 00:44
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.
  Mit Zitat antworten Zitat