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.