KillerPinockel
Lieutenant
- Dabei seit
- Jan. 2009
- Beiträge
- 609
Hey,
ich versuche aktuell eine kleine CRC Überprüfung einzubauen...
Methode: CRC-CCITT (0xFFFF)
Eingabewert: HEX-String
Ausgabe: HEX-String
Hier mal ein kleines Beispiel:
Daten: 0095001000020000E15D423C7C803F0327100A0A0BAB991764D00000082E
CRC (http://www.lammertbies.nl/comm/info/crc-calculation.html): 0x2DE6 (Besser wäre ein "reines" 2DE6)
Ich kriege einfach keinen vernünftigen Wert raus. Zumal viele Lösungen im Netz auf einem Byte-Array o.ä. basieren. Könnt ihr mir weiterhelfen?
Vielen Dank!
Okay ich bin ein Stückchen weiter. Hier mal mein Code
Das bringt zwar den richtigen Algo, aber leider noch das falsche Eingabeformat.
BSP
Input: 0095001000020000E15D423C7C803F0327100A0A0BAB991764D00000082E
SOLL: 2DE6
IST: BC7C
Auf der Seite von oben kann man das gut nachvollziehen. Stelle ich den Input von ASCII auf HEX, dann kommt der SOLL Wert raus, aber die Funktion arbeitet mit dem ASCII Input und damit kommt IST raus. Kann mir da jemand weiterhelfen?
ich versuche aktuell eine kleine CRC Überprüfung einzubauen...
Methode: CRC-CCITT (0xFFFF)
Eingabewert: HEX-String
Ausgabe: HEX-String
Hier mal ein kleines Beispiel:
Daten: 0095001000020000E15D423C7C803F0327100A0A0BAB991764D00000082E
CRC (http://www.lammertbies.nl/comm/info/crc-calculation.html): 0x2DE6 (Besser wäre ein "reines" 2DE6)
Ich kriege einfach keinen vernünftigen Wert raus. Zumal viele Lösungen im Netz auf einem Byte-Array o.ä. basieren. Könnt ihr mir weiterhelfen?
Vielen Dank!
Ergänzung ()
Okay ich bin ein Stückchen weiter. Hier mal mein Code
Code:
...
CRC_CCITT(TextStringToByteArray(CompleteData))
...
Public Function CRC_CCITT(ByVal Data() As Byte) As String
Dim crc As UShort
Dim i As Byte, j As Integer
Dim crch As String, crcl As String
crc = &HFFFF
For j = 0 To Data.Length - 1
i = &H80
Dim val As UShort = Data(j)
val = val << 8
crc = crc Xor val
While (i <> 0)
If (crc And &H8000) <> 0 Then
crc = crc << 1
crc = crc Xor &H1021
Else
crc = crc << 1
End If
i = i / 2
End While
Next j
crch = Hex(Fix(crc / 256))
If Len(crch) = 1 Then crch = "0" & crch
crcl = Hex(crc Mod 256)
If Len(crcl) = 1 Then crcl = "0" & crcl
CRC_CCITT = crch & crcl
End Function
Das bringt zwar den richtigen Algo, aber leider noch das falsche Eingabeformat.
BSP
Input: 0095001000020000E15D423C7C803F0327100A0A0BAB991764D00000082E
SOLL: 2DE6
IST: BC7C
Auf der Seite von oben kann man das gut nachvollziehen. Stelle ich den Input von ASCII auf HEX, dann kommt der SOLL Wert raus, aber die Funktion arbeitet mit dem ASCII Input und damit kommt IST raus. Kann mir da jemand weiterhelfen?