Einzelnen Beitrag anzeigen

Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#11

Re: Checksumme in einem Übertragungsprotokoll bilden (LSB)

  Alt 16. Feb 2009, 10:34
Zitat von bug0815:
...
Kann mir wer plausibel erklären, oder einen hilfreichen Link posten, was die 8 LSB meiner Summe 2179 (Dezimal), oder 0883 (Hex) sind. Wenn ich das mal Verstanden habe, kann ich etwas leichter nach weiteren Lösungsansätzen suchen.
Hallo,

es ist viel einfacher als du denkst: in Hex-Darstellung sind das die letzten beiden Digits, also von $883 wird nur $83 verwendet. Deshalb brauchst du beim Summieren die oberen Bits und Bytes garnicht mitrechnen, du kannst immer gleich nur das unterste Byte weiterverwenden:

Delphi-Quellcode:
function TForm1.CreateCheckSum(InStr: String): String;
var rCount,
    Sum : Integer;
begin
  Sum := 0;
  for rCount := 1 to Length(InStr) do
  begin
    Sum := (Sum + Ord(InStr[rCount])) and $FF;
   { oder Sum := (Sum + Ord(InStr[rCount])) Mod 256; }
  end;
  Result := IntToStr(Sum) + ' (' + IntToHex(Sum, 2) + ')';
end;
Dann brauchst du dir keine Gedanken darüber machen, wie gross die Summe werden kann.

WS1976: was soll er denn mit einem CCITT -Algorithmus, wenn das Gerät eine einfache Checksumme verwendet? Schreibst du die Geräte-Firmware für ihn um?

Gruss Reinhard

PS: wenn ich meine Geräte dokumentiere, rechne ich auch immer reale Prüfsummen aus, aber das ist mühsam; vielleicht hat sich der Autor einfach gedacht, 55 ist doch eine schöne Zahl, ohne das in Bezug zum Beispielstring zu setzen. Oder er hat sich einfach verrechnet.
  Mit Zitat antworten Zitat