Leider komme ich überhaupt nicht weiter.
Kann mir jemand wenigstens einen Tip geben, warum ich zu blöd bin, oben genannte Funktion zu konvertieren?
Hier ein Beispielcode, dass ich zum Thema Kermit noch auf der Platte hatte.
Aber auch damit scheitere ich beim bilden der korrekten Prüfsumme, obwohl doch zumindest das Polynom richtig zu sein scheint(?).
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Dim checksumcalculator = New CRC16CCITT( _
CRC16CCITT.InitialCRCValue.NonZero2)
Dim knut
Dim value() As Byte = System.Text.Encoding.ASCII.GetBytes( _
"6C20536574696F20322C31")
MsgBox(Format(checksumcalculator.ComputeCheckSum(value), "X2")) ' 29B1
End Sub
End Class
Public Class CRC16CCITT
Public Enum InitialCRCValue
Zeroes = 0
NonZero1 = &HFFFF
NonZero2 = &H1D0F
End Enum
Private Const poly As UShort = &H8408
Dim table() As UShort = {&H0, &H1189, &H2312, &H329B, &H4624, &H57AD, _
&H6536, &H74BF, &H8C48, &H9DC1, &HAF5A, &HBED3, &HCA6C, &HDBE5, &HE97E, _
&HF8F7, &H1081, &H108, &H3393, &H221A, &H56A5, &H472C, &H75B7, &H643E, _
&H9CC9, &H8D40, &HBFDB, &HAE52, &HDAED, &HCB64, &HF9FF, &HE876, &H2102, _
&H308B, &H210, &H1399, &H6726, &H76AF, &H4434, &H55BD, &HAD4A, &HBCC3, _
&H8E58, &H9FD1, &HEB6E, &HFAE7, &HC87C, &HD9F5, &H3183, &H200A, &H1291, _
&H318, &H77A7, &H662E, &H54B5, &H453C, &HBDCB, &HAC42, &H9ED9, &H8F50, _
&HFBEF, &HEA66, &HD8FD, &HC974, &H4204, &H538D, &H6116, &H709F, &H420, _
&H15A9, &H2732, &H36BB, &HCE4C, &HDFC5, &HED5E, &HFCD7, &H8868, &H99E1, _
&HAB7A, &HBAF3, &H5285, &H430C, &H7197, &H601E, &H14A1, &H528, &H37B3, _
&H263A, &HDECD, &HCF44, &HFDDF, &HEC56, &H98E9, &H8960, &HBBFB, &HAA72, _
&H6306, &H728F, &H4014, &H519D, &H2522, &H34AB, &H630, &H17B9, &HEF4E, _
&HFEC7, &HCC5C, &HDDD5, &HA96A, &HB8E3, &H8A78, &H9BF1, &H7387, &H620E, _
&H5095, &H411C, &H35A3, &H242A, &H16B1, &H738, &HFFCF, &HEE46, &HDCDD, _
&HCD54, &HB9EB, &HA862, &H9AF9, &H8B70, &H8408, &H9581, &HA71A, &HB693, _
&HC22C, &HD3A5, &HE13E, &HF0B7, &H840, &H19C9, &H2B52, &H3ADB, &H4E64, _
&H5FED, &H6D76, &H7CFF, &H9489, &H8500, &HB79B, &HA612, &HD2AD, &HC324, _
&HF1BF, &HE036, &H18C1, &H948, &H3BD3, &H2A5A, &H5EE5, &H4F6C, &H7DF7, _
&H6C7E, &HA50A, &HB483, &H8618, &H9791, &HE32E, &HF2A7, &HC03C, &HD1B5, _
&H2942, &H38CB, &HA50, &H1BD9, &H6F66, &H7EEF, &H4C74, &H5DFD, &HB58B, _
&HA402, &H9699, &H8710, &HF3AF, &HE226, &HD0BD, &HC134, &H39C3, &H284A, _
&H1AD1, &HB58, &H7FE7, &H6E6E, &H5CF5, &H4D7C, &HC60C, &HD785, &HE51E, _
&HF497, &H8028, &H91A1, &HA33A, &HB2B3, &H4A44, &H5BCD, &H6956, &H78DF, _
&HC60, &H1DE9, &H2F72, &H3EFB, &HD68D, &HC704, &HF59F, &HE416, &H90A9, _
&H8120, &HB3BB, &HA232, &H5AC5, &H4B4C, &H79D7, &H685E, &H1CE1, &HD68, _
&H3FF3, &H2E7A, &HE70E, &HF687, &HC41C, &HD595, &HA12A, &HB0A3, &H8238, _
&H93B1, &H6B46, &H7ACF, &H4854, &H59DD, &H2D62, &H3CEB, &HE70, &H1FF9, _
&HF78F, &HE606, &HD49D, &HC514, &HB1AB, &HA022, &H92B9, &H8330, &H7BC7, _
&H6A4E, &H58D5, &H495C, &H3DE3, &H2C6A, &H1EF1, &HF78}
Dim intValue As UShort = 0
Public Function ComputeCheckSum(ByVal bytes As Byte()) As UShort
Dim crc As UShort = Me.intValue
For i As Integer = 0 To bytes.Length - 1
crc = CUShort(((crc << 8) Xor table(((crc >> 8) Xor (&HFF And _
bytes(i))))))
Next
Return crc
End Function
Public Function ComputeCheckSumBytes(ByVal bytes As Byte()) As Byte()
Dim crc As UShort = ComputeCheckSum(bytes)
Return BitConverter.GetBytes(crc)
End Function
Public Sub New(ByVal initialvalue As InitialCRCValue)
Me.intValue = CUShort(initialvalue)
Dim temp, a As UShort
For i As Integer = 0 To table.Length - 1
temp = 0
a = CUShort(i << 8)
For j As Integer = 0 To 7
If ((temp Xor a) And &H8000) <> 0 Then
temp = CUShort((temp << 1) Xor poly)
Else
temp <<= 1
End If
a <<= 1
Next
table(i) = temp
Next
End Sub
End Class |