-         

Ergebnis 1 bis 6 von 6

Thema: Checksummenberechnung (2's complement sum)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672

    Checksummenberechnung (2's complement sum)

    Anzeige

    Hallo,

    ich benötige schon wieder Hilfe. Ich möchte mit einem Barcode-Modul kommunizieren. Speziell handelt es sich um das SE955 von Symbol.

    Laut Datenblatt läuft die Kommunikation in Datenpaketen ab, die mit einer Checksumme abgeschlossen werden. Leider werde ich aus den Beispielen und der Beschreibung nicht schlau, wie ich diese Checksumme berechne.

    Das erste Byte im Paket ist die Länge in Bytes, ohne die Checksumme. Die letzten beiden Bytes sind die Checksumme. Laut Datenblatt nur als "2's complement sum of message contents excluding checksum" beschrieben.

    Hier sind ein paar Beispiel-Pakete aus dem Datenblatt:
    05 C7 04 00 FE FE 32
    06 C7 04 00 01 9C FE 92
    07 C7 04 00 FE 01 9C FD 93
    07 C7 04 00 01 9C FE FD 93
    05 C7 04 00 04 FF 2C
    07 C7 04 00 FE FE FE FC 34
    07 C7 04 00 01 01 01 FF 2B

    Und hier die Antworten des Moduls dazu. Ich bin mir aber nicht sicher, ob da die Checksumme genauso berechnet wird:

    0D C6 00 00 FF 01 00 02 01 9C 07 E6 63 FC 3E
    09 C6 00 00 FF 01 00 9C 07 FD 8E
    0D C6 00 00 FF 01 00 02 01 9C 07 E6 63 FC 3E
    09 C6 00 00 FF 01 00 9C 07 FD 8E
    05 C6 00 00 FF FE 36
    0D C6 00 00 FF 01 00 02 01 9C 07 E6 63 FC 3E
    0B C6 00 00 FF 01 00 01 00 01 00 FE 2D

    Irgendwie stehe ich auf dem Schlauch. Egal wie ich rechne, ich komme einfach nicht dahinter, wie diese zwei Bytes Checksumme berechnet werden sollen. Erkennt von euch vielleicht jemand die Logik dahinter, oder kann mit dem Begriff "2's complement sum" etwas anfangen? Die Google Treffer erklären mir immer nur, dass es sich dabei wohl um die binäre Darstellungsweise von negativen Zahlen handelt...

    Viele Grüße
    Andreas

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    oder kann mit dem Begriff "2's complement sum" etwas anfangen?
    Summe = 05 + C7 + 04 + 00 + FE = 01CE
    2er-Komplement(01CE) = FE32
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo Stefan,

    danke erst mal. Sagst du mir auch wie ich ein 2er-Komplenet berechne? von 0x10000 abziehen?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Zweierkomplement ist Informatiker-Sprech für "das Vorzeichen umdrehen" bei der heute üblichen Darstellung vorzeichenbehafteter Ganzzahlen. Eine solche Prüfsumme kannst du berechnen, indem du entweder für jedes Datenbyte chksum -= datenbyte berechnest und chksum vorher auf 0 initialisierst, oder aber du addierst einfach alle Datenbytes auf (chksum += datenbyte, chksum vorher wieder auf 0 initialisieren) und änderst dann das Vorzeichen (real_chksum = -chksum)

    mfG
    Markus

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Bumbum Beitrag anzeigen
    Sagst du mir auch wie ich ein 2er-Komplenet berechne? von 0x10000 abziehen?
    Sagtest du nicht, du hättest bereits gegooglet? Da stand mit Sicherheit auch jeweils dabei, wie das Zweierkomplement gebildet wird. Es ist das Inverse + 1.
    MfG
    Stefan

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo Stefan,

    das stand da tatsächlich dabei und ich habe es ausprobiert, aber es hat nie gepasst. Meisstens war das Ergebnis um den Wert 1 daneben, manchmal auch völlig. Jetzt ist es logisch.
    Ich vermute die völlig daneben Ergebnisse waren wohl Rechenfehler.

    Viele Grüße
    Andreas

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •