ByteArray zu Hex String Problem

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaSDL0403.

    ByteArray zu Hex String Problem

    Hallo Leute,

    Ich habe eine funktion um ein ByteArray der zu Hex String Konvertiert.

    VB.NET-Quellcode

    1. Private Function Bytes_To_String2(ByVal bytes_Input As Byte()) As String
    2. Dim strTemp As New StringBuilder(bytes_Input.Length * 2)
    3. For Each b As Byte In bytes_Input
    4. strTemp.Append(Hex4(b))
    5. Next
    6. Return strTemp.ToString()
    7. End Function


    Und folgendes wird in der Textbox angezeigt: D2000004000000042C040008408200103D80FFFF618CFF007D83212E7CA320AE6000000000000000


    Ich versuchte diese Hex Ziffern so dar zu stellen in der Textbox:

    D2000004 00000004
    2C040008 40820010
    3D80FFFF 618CFF00
    7D83212E 7CA320AE
    60000000 00000000



    aber ohne erfolg mit insert, Trim, join und schleifen ect. Die erste Zeile D2000004 00000004 soll nicht gelesen werden, nur die restlichen. Es sind quasi 32Bit mit leerzeichen in der mitte und nochmal 32Bit usw und das untereinander nur habe ich kein schimmer wie ich das anstellen muss.



    Gruß Micha

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    3. Dim ints = {9838423, 32423, 98098, 7892, 4, 98798, 987, 100} 'Int-array mit grader Anzahl
    4. Dim bytes(Buffer.ByteLength(ints) - 1) As Byte 'byte-array dimensionieren
    5. Buffer.BlockCopy(ints, 0, bytes, 0, bytes.Length) 'ints in byte-Array umkopieren
    6. MsgBox(Byte2Hex(bytes))
    7. End Sub
    8. Private Function Byte2Hex(ByVal bytes As Byte()) As String
    9. Dim sb = New System.Text.StringBuilder
    10. For z = 0 To bytes.Length \ 8 - 1
    11. For y = 0 To 1
    12. For x = 0 To 3
    13. sb.Append(bytes(z * 8 + y * 4 + x).ToString("x2"))
    14. Next
    15. sb.Append(" ")
    16. Next
    17. sb.Append(Environment.NewLine)
    18. Next
    19. Return sb.ToString
    20. End Function
    21. End Class
    ich werde dir jetzt nicht jeden wunsch vor-programmieren, v.a., wenn du deine Anforderungen zwischedrin änderst.

    Du wolltest die Ausgabe in einem String, und nun willst du die Ausgabe in einer Listbox.

    Was kommt als nächstes?


    Lerne aus dem Beispiel, und löse dann deine Probleme selber.
    ich habe nicht gesagt das du mir auf wunsch vor programmieren sollst. Das mit dem Listbox eintrag habe ich ja selber schon gemacht ;) ich habe NUR ne Frage gestellt ob es möglich WÄRE am ende der Zeilen die Leerzeichen weg zu bekommen und die neue leere Zeile.
    Da ich es später in einer Listbox eintrage, kommt am ende ein leerer
    eintrag. Wenn nicht, muss ich notfalls die letzten eintrag entfernen.

    Ich hebe das nochmal hervor "Da Ich es später...." Ich hatte NUR das Problem mit der Funktion ^^
    Also das mit der Listbox ignorieren weil eine zweite Frage Wie ich das zu der Listbox hinzufügen kann habe ich nicht gestellt.

    Es geht also nur um die leerzeichen am ende der zeilen und die neue leere Zeile und nichts anderes. Also bitte nicht falsch verstehen.

    Lerne aus dem Beispiel, und löse dann deine Probleme selber.
    Oh, ok. entschuldige das ich deine Zeit geraubt habe. Wenn man dazu eine kleine Frage stellt, wird immer gleich als eine Frage interpretiert das auf wunsch vor programmiert werden soll. verstehe ich nicht.



    Trotzdem danke für deine Hilfe.

    Edit by hal2000:
    - Die Farbe ROT ist der Moderation vorbehalten. Farbe geändert.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „hal2000“ ()

    MichaSDL0403 schrieb:

    Oh, ok. entschuldige das ich deine Zeit geraubt habe
    Och - nicht weiter schlimm. Hat mir Spaß gemacht, die 3-geschachtelte Scheife zu entwickeln, und mit StringBuilder und Buffer-Klasse rumzuhantieren.

    Ich empfehle, die verwendeten Objekte im ObjectBrowser zu untersuchen - die haben z.T. noch viele weitere nützliche Möglichkeiten.

    StringBuilder hat zB. eine Remove - Methode.

    Eine Alternative wäre auch, Strings mitte String.Join() - Methode zu verknüppern - die fügt einen Delimitter explizit zwischen den Einzelstrings ein.

    Immer feste im ObjectBrowser die Sachen angugge :thumbsup:
    Ich würde immer 4Stück-weise Bytes aus dem Array entnehmen und diese nach hex konvertieren.
    Erscheint mir logischer.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, mit den leerzeichen habe ich gelöst. Habe die funktion bisschen verändert nach unendlichen porbieren.

    VB.NET-Quellcode

    1. Private Function StringToHex(ByVal bytes As Byte()) As String
    2. Dim htext As String = String.Empty
    3. For i = 0 To bytes.Length - 1
    4. htext &= bytes(i).ToString("x2")
    5. If i Mod 8 = 7 Then
    6. htext &= vbCrLf
    7. ElseIf i Mod 4 = 3 Then
    8. htext &= " "
    9. End If
    10. Next
    11. Return htext.TrimEnd(" ", vbCr, vbLf)
    12. End Function


    Die leerzeichen an den enden jeder zeile sind weg und die neue leere zeile ist auch nicht mehr da.