Announcement

Collapse
No announcement yet.

Bytearrays / Hexstring

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bytearrays / Hexstring

    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

  • #2
    Mit int.Parse() kannst Du den Hexwert (sollte ja als String vorliegen) in einen Integer Wert umwandeln.
    Diesen kannst Du dann mit:
    System.BitConverter.GetBytes();
    in ein ByteArray umwandeln

    Comment


    • #3
      Okay, vielen Dank. So etwas ähnliches hatte ich bereits realisiert. Wie baue ich meinen Code jedoch so um, dass er mit dem erzeugten Bytearray arbeitet? Bisher wird ja ein String benötigt...

      Comment


      • #4
        Ach das habe ich dann wohl falsch verstanden. Naja... Du musst doch im Endeffekt nur den String in dieser Schleife

        For I = 1 To Len(strInput)
        lngCheck = Asc(Mid$(strInput, I, 1))

        durch Dein Array ersetzen. Natürlich musst Du der Funktion dann ein Byte[] übergeben. Vorher dann den String in ein ByteArray umwandeln.
        Das hier:

        Asc(Mid$(strInput, I, 1))

        wandelt jedes Zeichen in ein Long um. Allerdings kann jedes Zeichen auch durch einen char dargestellt werden. Und ein char ist im Endeffekt dasselbe wie ein byte, nur dass das eine ein Zeichen darstellt und das andere eine Zahl. Den Wert kann man aber 1 zu 1 übernehmen.

        Mit

        System.Text.ASCIIEncoding kannst Du Deinen ASCII Text in ein ByteArray umwandeln.

        Kann Dir leider keinen Quelltext posten, da ich in C# programmiere

        Comment

        Working...
        X