Checksummenberechnung wie muss hier gerechnet werden?

OP #3582007
Lesenswert?

Hallo Leute,
ich brauche mal kurz eure Hilfe bei einer Checksummenberechnung
folgenden schon fertigen String habe ich:
02 FD 00 03 30 00 62 F2

02 FD Frame beginnt immer mit dieser Kennung
00 03 Anzahl der gesendeten Bytes (Adresse + CRC)
30 Befehl
00 62 Adresse des auszulesenden Wertes
F2 Checksumme (CRC)

Wie komme ich auf die Checksumme F2?
Ich habe auch einen code der aber in VB geschrieben ist und ich mich 
nicht damit auskenne:

Public Function crc(Framestr As String) As Byte
Dim count As Integer
Dim dummy As Byte
Do While (count < Len(Framestr))
count = count + 1
dummy = Asc(Mid(Framestr, count)) * 2 And &HFF
crc = crc Xor CByte(Asc(Mid(Framestr, count)) Xor dummy)
Loop End Function

Kann mir da jemand helfen was ich rechnen muss?

Grüße Christian
OP #3582062
Lesenswert?

Hallo Wolfgang,
danke für die Antwort,
Es geht mir um folgende Zeilen:
dummy = Asc(Mid(Framestr, count)) * 2 And &HFF
crc = crc Xor CByte(Asc(Mid(Framestr, count)) Xor dummy)

Bei der ersten Zeile wird wohl das erste Zeichen aus dem String genommen 
und seine Repräsentation als Hexwert zurückgegeben und dann noch mit FF 
konjugiert.
allerdings weis ich nicht warum es den dummy gibt, in der zweiten Zeile 
wird dann der immer ge Xor t, aber naja so richtig raff ichs nicht am 
Beispiel.
Gast #3582096
Lesenswert?

Chris tian schrieb:
> dummy = Asc(Mid(Framestr, count)) * 2 And &HFF

Mid(Framestr, count) fischt das count-e Zeichen aus dem String. Der 
Zeichencode davon wird anschließend mit 2 multipliziert und das Ergebnis 
auf ein Byte begrenzt.
Mit Hex-Code passiert da nix

> crc = crc Xor CByte(Asc(Mid(Framestr, count)) Xor dummy)
Umwandlung des Zeichens in Zeichencode, Xor mit dem oben erzeugten Byte 
(dummy) und Xor mit dem bisherigen crc-Byte
OP #3582506
Lesenswert?

Also der Hexwert...
Also gehe ich mal durch...
 Er selektiert den string also nicht nach Byte sondern nach einzelnen 
Zahl/Buchstaben.
Und fängt bei 0 an, da erstes Zeichen im String:
Dim zeichen = Asc(Buchstabe) --> Da steht jetzt 0x30 drin also Der 
Hexcode von 0

Dim dummy = CByte(zeichen * 2 And &HFF) -->0x30 wird mit 2 multipliziert 
also 0x60 und dann noch auf ein Byte begrenzt. (Cbyte wandelt es in ein 
Byte um, sollte aber trotzdem 0x60 in dummy stehen)

jetzt wird's interessant:
retVal = retVal Xor CByte(zeichen Xor dummy) --> erstmal wird 0x60 mit 
0x30 ge xor t und dann nochmal mit retval deren Initialisierungswert 0 
ist.
Ergebnis: retval --> 0x50.

Ist das so korrekt?
hab das jetzt mal auf Papier so nachgerechnet komm aber auf 0C und nicht 
auf F2, irgendwo ist da noch ein Fehler in meinen Annahmen...
OP #3582593
Lesenswert?

String Zeichen(hex)  Zeichen*2  Zeichen xor dummy  retval (init=0)
 0          30          60              50              50

2           32          64              56              6

F           46          8C              CA             CC

D           44          88              CC              0

0           30          60              50             50

0           30          60              50              0

0           30          60              50             50

3           33          66              55              5

3           33          66              55             50

0           30          60              50              0

0           30          60              50             50

0           30          60              50              0

6           36          6C              5A             5A

2           32          64              56     0C ungleich F2

Wo liegt der Fehler?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren