Hex -> Dezimal -> Ascii

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von roddy.

    Hex -> Dezimal -> Ascii

    Hi,

    Wenn ich in meiner Visual Basic 2008 Express Edition ein Hex-Code zu einem Ascii-Text konvertieren will, muss ich wohl über den Weg der Dezimalkodierung gehen, so wie ich das sehe. (Bin erst 2 Tage dabei)

    Da mein Plan noch nicht sehr ausgereift ist und es eher am ersten Punkt scheitert, versuche ich mal mein Vorhaben beispielhaft zu erklären, habe ja noch keinen richtigen Code.

    Ich würde die Hex-Blöcke in ihre 2 Zahlen aufteilen. Jede Zahl in den Dezimalcode bringen: Asc(Nr1) und Asc(Nr2), anschließend - je nach dem ob Zahl oder Buchstabe(IsNumeric?), -55 oder -48. (Bsp.: a1 = Asc(Nr1) - 55)
    Dann das Ergebniss von der ersten Zahl mit 16 Multiplizieren, das Ergebniss der 2. Zahl mit 1. (b1 = a1 * 16) Anschließend dann beide Werte zusammen rechnen (c1 = b1 + b2) und das Ergebniss dekodieren. (TextBox2.Text = Chr(c1))

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Dim a1 As Object
    3. Dim b1 As Object
    4. Dim a2 As Object
    5. Dim b2 As Object
    6. Dim c As Object
    7. Dim d As Object
    8. 'a1 = [ERSTE.VON.2.HEX.ZAHLEN]
    9. b1 = Asc(a1)
    10. If (b1 > 47) Or (b1 < 58) Then
    11. b1 = b1 - 48
    12. ElseIf (b1 > 65) Or (b1 < 70) Then
    13. b1 = b1 - 55
    14. Else
    15. ' Fehlermeldung
    16. End If
    17. 'a2 = [ZWEITE.VON.2.HEX.ZAHLEN]
    18. b2 = Asc(a2)
    19. If (b2 > 47) Or (b2 < 58) Then
    20. b2 = b2 - 48
    21. ElseIf (b2 > 65) Or (b2 < 70) Then
    22. b2 = b2 - 55
    23. Else
    24. ' Fehlermeldung
    25. End If
    26. c = b1 * 16
    27. d = c + b2
    28. TextBox1.Text = Chr(d)End Sub


    Frage: Wie teile ich die 2 Nummern des Hexadezimals eines Buchstabens in 2 Variablen ein, sodass ich damit rechnen kann? Oder überhaupt, wie ordne ich Textstellen verschiedene Variablen zu?

    Grüße

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

    Man kann Hexadezimalwerte einfach in Zahlenwerte umwandeln, indem man "&H" voranstellt:

    VB.NET-Quellcode

    1. CInt("&H4A")
    ergibt beispielsweise 74 (=4*16+10).

    Mit

    VB.NET-Quellcode

    1. Chr(CInt("&H4A"))
    erhält man dann den Buchstaben J.

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

    Okay. Das reduziert die Länge schon mal und ich kann immerhin Hex einzelln bearbeiten. Wenn ich nun aber eine ganze Datei(ggf. Text) als Hex dargestellt habe und diese wieder als ASCII lesen will, muss ich ja mehr als nur eine Hex-Ziffer bearbeiten. Denke, das löst man irgendwie mit einer Schleife. Haber allerdings keine Idee, wie. :)

    Hilfe gern gesehen. ;)
    So würde man es mit VBA machen:

    VB.NET-Quellcode

    1. HexText = "56697375616C204261736963"
    2. AscText = ""
    3. For i = 1 To Len(HexText) Step 2
    4. AscText = AscText & Chr(CInt("&H" & Mid(HexText, i, 2)))
    5. Next


    Bei AscText kommt im Beispiel "Visual Basic" heraus.

    Ich glaube, in VB 2008 benutzt man statt Len und Mid andere Funktionen. Kannst es ja trotzdem mal ausprobieren.
    Ok, die Übersetzung von Text -> Hex -> Text läuft perfekt. Nur hätte ich zur Übersichtlichkeit noch gerne Leerzeichen zwischen den einzellnen Hex-Ziffern (48616C6C6F -> 48 61 6C 6C 6F). Das umzusetzen ist nicht schwer, einfach:

    TextBox2.Text = TextBox2.Text & Hex(Asc(wert))

    -> TextBox2.Text = TextBox2.Text & " " & Hex(Asc(wert))

    Wenn die Leerzeichen drin sind, kann ichs aber nicht mehr von Hex zu Text umwandeln. Nun könnte ich mit Replace() die ganzen Leerzeichen rausmachen und anschließend einfügen - erste Idee. Aber erstens weiß ich nicht wie ich sie dann wieder einfüge und zweitens ist es eine recht unelegante Lösung. :)

    Hilfe! =D

    Mhh... meinte eigentl. das schon probiert zu haben und trotzdem gehts nun.

    Naja, vielen Dank. :D

    Nur ums für mich nun nach zu vollziehen. Er geht 3 Schritte weiter, benutzt davon aber nur die ersten 2 Zeichen? (...Step 3...; ...Mid(..., 2))

    Bin ja erst am Anfangn des 3. Tages, habt Nachsicht. ^^
    Am Anfang der Folge wird ja gesagt: i = 1
    Dann nimmt er bei Mid von der Position i die nächsten 2 Werte aus dem HexText und anschließend entschlüsselt bzw. verschlüsselt die dann wieder (Je nach dem wie rum man es betrachtet?!).
    Dann erhöht er i um 3 = 4, dann beginnt das Spiel wieder von vorn.


    Richtig so? Bringt mir ja wenig, wenn ich's stumpf abtippe und es nicht verstehe. ;)



    Problem Solved.

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

    Richtig verstanden:

    Beim ersten Schleifendurchlauf hat i den Wert 1 (For i = 1), der bei jedem Durchlauf um 3 erhöht wird (Step 3), also 1, 4, 7 usw., solange bis die Länge des Textes erreicht ist (To Len(Text)). Wird "Step ..." weggelassen, ist die Schrittlänge 1. Mid(Text, 7, 2) nimmt 2 Zeichen von Text, beginnend an der Stelle 7.

    Habs nur nochmal mit eigenen Worten formuliert.

    Bei meinem Code zur Umwandlung nach Hex ist mir noch ein Fehler aufgefallen: Das Leerzeichen nicht vor Hex(...) anhängen, sondern danach. Sonst funktioniert die Umwandlung nach ASCII nicht mehr. Sorry.

    Und noch was: Rot dürfen nur Mods benutzen.