Hallo zusammen!
Ich versuche seit geraumer Zeit den untenstehen Code anzupassen. Dieser liefert mir einen korrekten CRC Wert, der anhand eines String berechnet wird. Die für die Prüfsumme zu verwendenden Daten liegen jedoch als Hexstring vor, welche ich auch in ein Bytearray verwandeln könnte.
Es ist sicher bloss eine kleine Formatierungsfrage, doch ich komme nicht dahinter, wie den Code anpassen kann.
[highlight=vbnet]Public Function getCRC16(ByVal strInput As String)
Dim lngCheck As Long
Dim Power(7) As Integer
Dim I As Integer
Dim J As Integer
Dim Poly As Long
Dim CRC As Long
Dim TestBit As Boolean
Dim TestBit1 As Boolean
Dim TestBit2 As Boolean
Poly = &H1021
CRC = &HFFFF
For J = 0 To 7
Power(J) = 2 ^ J
Next J
For I = 1 To Len(strInput)
lngCheck = Asc(Mid$(strInput, I, 1))
For J = 7 To 0 Step -1
If (CRC And 32768) = 32768 Then
TestBit1 = True
Else
TestBit1 = False
End If
If (lngCheck And Power(J)) = Power(J) Then
TestBit2 = True
Else
TestBit2 = False
End If
TestBit = TestBit1 Xor TestBit2
CRC = (CRC And 32767) * 2
If TestBit = True Then
CRC = CRC Xor Poly
End If
Next J
Next I
Dim tmp As String
tmp = Hex(CRC)
getCRC16 = tmp
End Function[/highlight]
Wie würdet Ihr dies verändern?
Gruss
Michael
Ich versuche seit geraumer Zeit den untenstehen Code anzupassen. Dieser liefert mir einen korrekten CRC Wert, der anhand eines String berechnet wird. Die für die Prüfsumme zu verwendenden Daten liegen jedoch als Hexstring vor, welche ich auch in ein Bytearray verwandeln könnte.
Es ist sicher bloss eine kleine Formatierungsfrage, doch ich komme nicht dahinter, wie den Code anpassen kann.
[highlight=vbnet]Public Function getCRC16(ByVal strInput As String)
Dim lngCheck As Long
Dim Power(7) As Integer
Dim I As Integer
Dim J As Integer
Dim Poly As Long
Dim CRC As Long
Dim TestBit As Boolean
Dim TestBit1 As Boolean
Dim TestBit2 As Boolean
Poly = &H1021
CRC = &HFFFF
For J = 0 To 7
Power(J) = 2 ^ J
Next J
For I = 1 To Len(strInput)
lngCheck = Asc(Mid$(strInput, I, 1))
For J = 7 To 0 Step -1
If (CRC And 32768) = 32768 Then
TestBit1 = True
Else
TestBit1 = False
End If
If (lngCheck And Power(J)) = Power(J) Then
TestBit2 = True
Else
TestBit2 = False
End If
TestBit = TestBit1 Xor TestBit2
CRC = (CRC And 32767) * 2
If TestBit = True Then
CRC = CRC Xor Poly
End If
Next J
Next I
Dim tmp As String
tmp = Hex(CRC)
getCRC16 = tmp
End Function[/highlight]
Wie würdet Ihr dies verändern?
Gruss
Michael
Comment