Wie kann ich Hex zu lesbaren Text ausgeben lassen und wieder zurück

  • .NET (FX) 4.5–4.8
  • VB.NET

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

    Wie kann ich Hex zu lesbaren Text ausgeben lassen und wieder zurück

    Hallo Community,

    Ich suche schon seid tagen nach einer möglichkeit um Hex umzuwandeln zu Text und wieder zurück.

    Kurze erklärung was ich vorhabe:


    (Hex to Text)

    aus einem Dokument bekomme ich folgenden Wert: 48616c6c6fa

    Diesen möchte ich in vb zum text umwandeln (währe dann: Hallo) und im label anzeigen lassen.

    Danach möchte ich folgendes damit machen:


    (Text to Hex)

    Nun möchte ich einen wert aus einer textbox nehmen (Guten Tag) und diesen in Hex umwandel (währe dann: 477574656e20546167)

    danach soll alle 2 ziffern in einer seperaten Textbox landen

    Also
    und dazu brauch ich ja auch einen code der ja dann in dem sinne die zeichenfolge(477574656e20546167) in hey1, hex2, hex3 usw. einteilt.
    477574656e20546167 soll dann

    Textbox1.Text = hex1 (47)
    Textbox2.Text = hex2 (75)
    Textbox3.Text = hex3 (74)
    usw.


    kann mir da jemand helfen?

    währe super, meine Anwendung scheitert nur daran.

    Mfg und vielen Dank
    TriX


    Aus den Tipps und Tricks verschoben
    -Artentus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    @TriX Willkommen im Forum. :thumbup:
    Gugst Du hier.
    Deine Hex-Zeichenfolge kannst Du so in ein Byte-Array konvertieren:

    VB.NET-Quellcode

    1. Dim hex = "48616c6c6f" ' Dein Hex-String
    2. Dim by As New List(Of Byte) ' List zum Aufsammeln der Bytes
    3. For i = 0 To hex.Length - 1 Step 2 ' 2 Zeichen zu 1 Byte
    4. Dim hh = hex.Substring(i, 2) ' das aktuelle Hex-Paar
    5. Dim bt = Convert.ToByte(hh, 16) ' in ein Byte wandeln
    6. by.Add(bt) ' der List hinzufügen
    7. Next
    8. Dim bb() = by.ToArray ' in ein Byte-Array konvertieren

    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!
    Vielen Dank und ebendo willkommen,

    leider klappt es bei mir nicht was du hier geschrieben hast VB 2013 habe ich kanns daran liegen?

    ich möchte als ein Hex in einer textbot als text anzeigen lassen.

    und 2te sache ist, einen Text in hex wandel und dann alle 2 ziffern eufteilen am besten so das ich später pro textbox je 2 ziffern aus dem hex habe nacheinander.

    Mfg TriX
    @Murdock,

    das Sieht ja schonmal okay aus, leider kenne ich die encodeing möglichkeiten nicht, bin in vb ein kompletter anfänger, und jetzt weis ich erst das ein bytearray auch hex ist.

    damit man meine sache mal genau verstehen kann, schreibe ich nun mal den ablauf im vb code hier hinein und die stellen die ich suchen, nenne ich dann "Code gesucht".

    vb-code ablauf:

    Aufgabe 1: Soll Hex in text umwandeln

    Dim hexttext = "48616c6c6f"
    "Code gesucht"
    Label1.Text = textvonhex (sollte wenn alles richtige umgewandelt wurde dann Hallo im Label1 ausgeben)


    Aufgabe 2: (soll inhalt von TextBox1 in einen Hex code umwandeln und alle 2 stelle in einer seperaten Textbox wieder ausgeben.)

    Dim texttohex = TextBot1.Text (beispielwort: Hallo)
    "Code Gesucht"
    TextBox2.Text = hex1 (Sollte nun 48 sein)
    TextBox3.Text = hex2 (sollte nun 61 sein)
    TextBox4.Text = hex3 (sollte nun 6c sein)
    TextBox5.Text = hex4 (sollte nun 6c sein)
    TextBox6.Text = hex5 (sollte nun 6f sein)

    dieses auseinander gefuchtel ist sehr wichtig

    Mfg TriX

    VB.NET-Quellcode

    1. 'HexToString
    2. Function HexToString(ByVal hex As String) As String
    3. Try
    4. Dim text As New System.Text.StringBuilder(hex.Length \ 2)
    5. For i As Integer = 0 To hex.Length - 2 Step 2
    6. text.Append(Chr(Convert.ToByte(hex.Substring(i, 2), 16)))
    7. Next
    8. Return text.ToString
    9. Catch ex As Exception
    10. MessageBox.Show(ex.Message)
    11. End Try
    12. End Function
    13. 'StringToHex
    14. Function StringToHex(ByVal text As String) As String
    15. Try
    16. Dim hex As String
    17. For i As Integer = 0 To text.Length - 1
    18. hex &= Asc(text.Substring(i, 1)).ToString("x").ToUpper
    19. Next
    20. Return hex
    21. Catch ex As Exception
    22. MessageBox.Show(ex.Message)
    23. End Try
    24. End Function


    Aufruf:

    VB.NET-Quellcode

    1. ' HexToString
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. TextBox2.Text = HexToString(TextBox1.Text)
    4. End Sub
    5. 'StringToHex
    6. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    7. TextBox2.Text = StringToHex(TextBox1.Text)
    8. End Sub


    ??? - Aufgabe 2: (soll inhalt von TextBox1 in einen Hex code umwandeln und alle 2 stelle in einer seperaten Textbox wieder ausgeben.) - ???
    Und wenns mal länger wird als - Hallo - werden's en Arsch voll Textboxen oder wie... :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    danke für die antworten,

    zu aufgabe 2 sind es maximal 20 buchstaben also 20 textboxen, mit den textboxen ist es nur als beispiel genannt, wird komplett was anderes mir angestellt.

    also bitte die lösung dazu danke ;)

    am besten auch noch eine art IF abfrage ob der text 1 oder 2 oder bis 20 buchstaben enthällt then textbox1 = hex1 usw.

    Danke
    Probier mal das:

    C#-Quellcode

    1. static List<char> allValues = new List<char> { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    2. private static IEnumerable<char> HexToString(string pHex)
    3. {
    4. for (int i = 0; i < pHex.Length; i += 2)
    5. {
    6. string lNewHex = string.Concat(pHex[i], pHex[i + 1]);
    7. yield return (char)((allValues.IndexOf(lNewHex[1])) + (allValues.IndexOf(lNewHex[0]) * 16));
    8. }
    9. }


    Beim Umwandeln von Hex in Decimal kann man den n-ten Index in der Hexansicht als Exponent zur Basis 16 * den Wert ansich nehmen und wenn man alles zusammenaddiert, kommt die Decimal Ansicht zustande.
    Jetzt besteht ein 'Buchstabe' immer aus 2 Hexzeichen, d.h. man benötigt immer nur *1 (weglassen) und *16 (Basis) zum Wert zunehmen, damit erspart man sich viel Zeit, um genau zu sein:

    HexToString = Meine obere Funktion
    HexString = TVX Funktion

    C#-Quellcode

    1. HexToString("0123456789ABCDEF"); // Benötigt für 1 millionen Durchläufe 28 ms
    2. HexString("0123456789ABCDEF"); // Benötigt für 1 millionen Durchläufe 550 ms

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RushDen“ ()