AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

checksum eines RS232-strings erstellen

Ein Thema von GPR-Man · begonnen am 14. Dez 2010 · letzter Beitrag vom 15. Dez 2010
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 14:28
Delphi-Quellcode:
sum := 0;
if i := 1 to length(s) then
  inc(sum, ord(s[i]));

checkchar := char((not sum) and $FF);
s := s + checkchar;
Andreas
  Mit Zitat antworten Zitat
GPR-Man

Registriert seit: 28. Okt 2008
Ort: Zürich
14 Beiträge
 
RAD-Studio 2009 Pro
 
#2

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 15:00
Danke, der Code ergibt jedoch für FFD0020005 2E an Stelle von 2A und für FF1000 F0 an Stelle von F1.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 15:57
Delphi-Quellcode:
sum := 0;
for i := 1 to length(s) do inc(sum, ord(s[i]));
checkchar := char(-sum and $FF);
  Mit Zitat antworten Zitat
GPR-Man

Registriert seit: 28. Okt 2008
Ort: Zürich
14 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: checksum eines RS232-strings erstellen

  Alt 15. Dez 2010, 06:55
Der Code sieht nun so aus:
Delphi-Quellcode:
  function CalculateChecksum(s: string): Longint;
  var
    i, sum: integer;
    checkchar : Char;
  begin
    sum := 0;
    for i := 0 to length(s)-1 do
      inc(sum, ord(s[i]));
    checkchar := char((- sum) and $FF);

    Result := Ord(checkchar);
  end;
und liefert bei 3 bytes den korrekten Wert, also FF1000 -> F1 oder FF3000 -> D1. Sobald der String jedoch länger wird, stimmt es nicht mehr:
- FF64020006 ergibt 9B, sollte 95 sein
- FF900200FF ergibt 6F, sollte 70 sein
- FFD20400000005 ergibt 2B, sollte 26 sein
Was muss man noch ändern?
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: checksum eines RS232-strings erstellen

  Alt 15. Dez 2010, 08:20
Die von mir angegebene Funktion liefert die korrekten Werte. Wenn Du sie verschlimmbesserst, indem Du i von 0 aus startest, darfst Du Dich nicht wundern, wenn sie falsche Ergebnisse liefert.
  Mit Zitat antworten Zitat
GPR-Man

Registriert seit: 28. Okt 2008
Ort: Zürich
14 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: checksum eines RS232-strings erstellen

  Alt 15. Dez 2010, 09:04
Danke, ärgerlich meinerseits, denn wenn man richtig
for i := 1 to length(s) do verwendet, stimmt alles.
Sorry und besten Dank für die sehr hilfreiche Unterstützung!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#7

AW: checksum eines RS232-strings erstellen

  Alt 15. Dez 2010, 09:15
Zumal wir das in #2 bereits hatten
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz