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
>Wie komme ich auf die Checksumme F2?
Es gibt tausende Möglichkeiten eine CRC zu berechnen.
Als erstes solltest du mal erzählen um was für ein Gerät
es geht. Vieleicht kennt das ja jemand.
holger schrieb: > Es gibt tausende Möglichkeiten eine CRC zu berechnen. Die VB-Funktion dürfte die Zahl der Möglichkeiten auf genau eine davon eingrenzen ;-) @Chris Was verstehst du an dem VB nicht?
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.
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
Also ich gehe mal davon aus das Count bei 0 anfängt. also erstes Zeichen(oder Byte??) 0*2 and FF -->0 dann: 0 -->Zeichencode 0 und xor mit 0 CRC wäre dann 0 ist das erstmal so richtig?
war das oben total falsch?
>>Umwandlung des Zeichens in Zeichencode
Was ist mit Zeichencode gemeint?
Chris tian schrieb: >>>Umwandlung des Zeichens in Zeichencode > Was ist mit Zeichencode gemeint? OMFG! Grundlagen Und nenn das bitte nicht CRC. Das ist eine simple XOR-Summe.
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...
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?
Ist "02 FD 00 03 30 00 62 F2" der String den du bekommst oder einfach nur die Ausgabe der Zeichenkette in Hex Werten?
02 ist das Byte... du darfst es nicht zerlegen ;) Byte Dummy CRC 02 04 06 FD FA 01 00 00 01 03 06 04 30 60 54 00 00 54 62 C4 F2
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.