VisualBasic CRC Check

KillerPinockel

Lieutenant
Dabei seit
Jan. 2009
Beiträge
595
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!
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?
 
Top