ByteArray zu String

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von schockerjo.

    ByteArray zu String

    Hey, ich wollte fragen wie man ein ByteArray zum einen String umwandeln kann.
    Dafür hab ich hier diese 2 Codes aber sie wollen nicht funktionieren:

    Quellcode

    1. Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
    2. Dim enc As System.Text.Encoding = System.Text.Encoding.Default
    3. Return enc.GetString(Barr)
    4. End Function
    5. Ergebniss : "MZ" einfach nur ;(
    6. oder
    7. Public Function StringToByteArray(ByRef str As String) As Byte()
    8. Return Convert.FromBase64String(str)
    9. End Function
    10. Ergebniss: Buchstabengewurschtl...


    Gibt es eine Möglichkeit Bytes so einzulesen wie der Editor von Windows.


    MfG
    Also mein Code grade

    Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim b As Byte() = IO.File.ReadAllBytes(Application.StartupPath)
    3. MsgBox(Encoding.UTF8.GetString(b))
    4. End Sub


    Und iwie krig ich 2 Messageboxen also als erstes das:


    Spoiler anzeigen


    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............... und so weiter





    Und dann noch eine mit "MZ"

    MfG

    Ich meine wirklich unverfälscht sowie der Editor sie einliest.
    Was ist denn das für eine Zeichenfolge?
    Die ergibt wohl kaum einen sinnvollen String.
    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!
    Wie Editor? Dann lese einfach mit nem System.IO.StreamReader ein ;)

    VB.NET-Quellcode

    1. Dim sDaten As String = ""
    2. Dim leserlein As New System.IO.StreamReader("datei.txt")
    3. sDaten = leserlein.ReadToEnd()
    4. leserlein.close()
    5. Console.Writeline(sDaten)

    Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
    Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
    :thumbsup:

    schockerjo schrieb:

    Ich meine wirklich unverfälscht sowie der Editor sie einliest.

    ein Editor liest keine Byte-Arrays ein.

    Ein Editor stellt immer nur Strings dar, und dafür werden die Bytes der Datei durch ein Encoding geparst.

    aber vlt. erfreut dich ja folgendes, auch wenn es keinesfalls eine Editor-Funktion ist:

    VB.NET-Quellcode

    1. Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
    2. Return BitConverter.ToString(Barr)
    3. End Function
    Mh, bei allen den hier geposteten Codes bekommen ich entweder
    Einfach nur: MZ
    oder: Das Buchstaben Gewurschtel...
    Bei deinem Code bekomme ich ein MZ und so ein Fragezeichen in ner Raute.

    Also ich erklärs nochma vielleicht war es ja ein bisschen umständlich erklärt:
    Ich möchte eine Applikation einlesen,
    dabei möchte ich einen String erhalten den ich auch bekomme wenn ich mit dem Windows eigenen Notepad diese Datei
    öffne.

    MfG
    Bei mir kommt sowas


    Spoiler anzeigen

    Quellcode

    1. MZ ÿÿ ¸ @ € º ´ Í!¸LÍ!This program cannot be run in DOS mode.
    2. $ PE L QÌP à ì Â þ
    3. @ @… ¨
    4. S @ 0½ H .text ë ì `.sdata Š ð @ À.rsrc 0½ @ ¾ ò @ @.reloc ° @ B à
    5. H Hã `' P ¸ ´ ÎÊï¾ ‘ lSystem.Resources.ResourceReader, mscorlib, Version=4.0.0.0, Culture=neutral,

    Wenns sein muss ...

    VB.NET-Quellcode

    1. Public Shared Function ByteArrayToString(ByRef Barr() As Byte) As String
    2. Return Convert.ToBase64String(Barr)
    3. End Function

    Probiere mal die Funktion aus ...

    EDIT: Was nachher rauskommt kommt eben auf die Codierung an, mit der du die Bytes interpretierst. Notepad++ nimmt standardmäßig ANSI ....

    Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
    Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
    :thumbsup:
    Also, eine Exe in einen String konvertieren wird wohl kaum funktionieren, denn das ist genau der Grund, warum du dieses 'MZ' immer bekommst.
    Du versuchst etwas in einen String zu konvertieren, was eventuell gar kein String sein "kann". Es könnte auch ne Bitmap sein, oder ne andere Resource.

    Fang nochmal neu mit der Erklärung deines Vorhabens an, weil hier so ziemlich keiner verstanden hat, was "genau" du machen möchtest.
    Dann kümmer dich darum, dass beim Einesen die richtige Codierung verwendet wird, verdammt! :D

    EDIT: Was passiert, wenn du das machst?

    VB.NET-Quellcode

    1. Dim sDaten As String = ""
    2. Dim leserlein As New System.IO.StreamReader("datei.exe", True)
    3. sDaten = leserlein.ReadToEnd()
    4. leserlein.close()
    5. Console.Writeline(sDaten)


    EDIT2: Es macht keinen verdammten Unterschied, ob du Notepad, Notepad++, NotepadForNoobs oder sonst was verwendest. Es kommt darauf an, mit welcher Codierung du die Daten interpretierst. Es kann sein, dass die Editoren das standardmäßig verschieden machen, das kann man aber in jedem vernünftigen Editor umstellen ...

    Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
    Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
    :thumbsup:

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

    Dann kommt
    wieder MZ mit nem ? in ner Raute.
    Hab jetzt alle mir bekannten Codierungen versucht: ;(
    ASCII
    ANSI
    BigEndianUnicode
    Unicode
    UTF32
    UTF7
    UTF8
    Codepage 437
    Codepage 850

    MfG

    Nur bei ANSI kam ein Ergebniss das von der Länge her gleich ist.

    Ja ok, sorry.... Also das normale Notepad scheitn ANSI zu nutzen.
    Aber das Ergebniss ist ein anderes.
    eine Exe enthält Byte-Folgen, die als String keinen Sinn ergeben.
    Den Editoren steht es also frei, diesen Nonsense so oder so darzustellen.
    Offensichtlich hat MS-Notepad eine spezielle Art der Darstellung von derlei Nonsense - da hast du ein Problem.

    Denn die .Net-Textbox oder Richtextbox stellen den Nonsense anders da oder vlt. auch garnet, was ja auch eine Form von Darstellung ist.