Bin Datei öffnen und als Hex auslesen

  • VB.NET

Es gibt 49 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Bin Datei öffnen und als Hex auslesen

    Hallo! Mein Anliegen ist etwas komplizierter.
    Ich möchte gerne mit einem VB Programm eine .bin Datei öffnen und in einer TextBox in Hexadezimal anzeigen lassen. Ich habe zwar ein OpenFileDialog, aber wie schaffe ich es, dass diese Datei auch von dem Programm erkannt und in die TextBox übertragen, und da in Hexadezimal ausgegeben wird?

    Danke schonmal im Voraus!
    Die Hexanzeige ist zeigt eigentlich nur die einzelnen Bytes in Hexform. Du öffnest also einen FileStream und liest aus diesem mit einem BinaryReader die einzelnen Bytes aus. Diese konvertierst du dann mittels ToString("x") in die Hexdarstellung und hängst sie an den Text der Textbox an.

    Xylon schrieb:

    und da in Hexadezimal ausgegeben wird
    Du vermengst hier 2 Probleme.
    1. eine Datei binär auslesen, die Information landet in einem Byte-Array.

    VB.NET-Quellcode

    1. Dim bb() = IO.File.ReadAllBytes(DEINE_DATEI)
    2. Anzeige einer numerischen Variable im Hex-Format. Das Hex-Format ist nämlich lediglich eine String-Repräsentation dieser numerischen Wertes.

    VB.NET-Quellcode

    1. MessageBox.Show(bb(0).ToString("X2"))
    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!
    Wow erstmal vielen Dank für die vielen Antworten :O. Ich muss erstmal alles ausprobieren weil ich garnicht weiß womit ich anfangen soll :D
    Also wie kann ich denn überhaupt die Datei die ich mit OpenFileDialog geöffnet habe, sozusagen "auswählen" um sagen zu können das
    TextBox4.Text = ByteArrayToTextString("FILE") oder so ist? Ich will ja nicht eine ganz bestimmte Datei öffnen, sondern eine Dateiart, nämlich .bin.
    Mir fehlt also ein Argument für die Konvertierung der Datei, um die Datei halt aufzurufen.
    Bin in diesem Bereich noch ein ziemlicher Anfänger :/

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xylon“ ()

    Der Dateiname ist egal.
    Wenn Du einem Mediaplayer eine .docx-Datei gibst, in der MP3-Informationen gespeichert sind, dann spielt er sie trotzdem ab (außer er filtert nach der Erweiterung).

    Was drin ist, macht es aus. Und eine Datei besteht halt aus einer Abfolge von Bytes.
    Wie Du diese Bytes dann darstellst, ist ein anderes Problem.
    Ein Byte kannst Du binär darstellen:

    Quellcode

    1. 10011101

    Oktal:

    Quellcode

    1. 235

    Dezimal:

    Quellcode

    1. 157

    Oder auch Hexadezimal:

    Quellcode

    1. 9D

    (Beachte, dass diese Zahlen alle den selben Wert haben.)

    Genaugenommen, kannst Du jede beliebige Basis verwenden. Es ist halt nur dann sinnvoll, wenn man auch genug Zeichen hat, um diese darzustellen. Also theoretisch wäre Basis 36 noch denkbar (0-9 und a-z), aber kein Mensch weiß dann die Bedeutung von q auswendig.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ja aber bei jeden Code den ich nehme muss ein Argument da sein. Bei FileOpenDialog, wo geht die Datei dann eigentlich hin?
    Hab diesen Code:

    Quellcode

    1. Dim ofd As New OpenFileDialog
    2. Dim path As String = ofd.InitialDirectory
    3. ofd.InitialDirectory = "C:\"
    4. ofd.Filter = "RAM Dumps (*.bin)|*.bin|" & " All Files (*.*)|*.*"
    5. ofd.Title = "Choose a BIN File"
    6. If ofd.ShowDialog() = DialogResult.OK Then
    7. TextBox8.Text = ofd.FileName
    8. End If

    Das passiert beim Klick auf den Button.
    Und wie sage ich jetzt, das die Datei in Hex bei der TextBox4 angezeigt werden soll? Wenn ich diese BinaryReaderKlasse benutze, kann ich die irgendwie nicht verwenden, weil das ein Modul ist. (Zumindest wüsste ich nicht, wie)
    Vom OpenFileDialog erhälst du den Dateinamen aus ofd.FileName. Mit diesem kannst du dann mittels File.Open einen FileStream erstellen. Wenn du diesen dann mit einem BinaryReader einließt, kannst du auf die einzelnen bytes zugreifen. Wenn dir die Namen nichts sagen kannst du auf MSDN danach suchen, dort wird alles genau erklärt.
    Die sollen als Hexadezimale Adressen angezeigt werden (Ganz genau genommen ist das ein Ram dump aus einem Wii Spiel XD). Jetzt zeigt der mir einen Fehler an weil der Zugriff auf C:\ verweigert wurde, was nun?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xylon“ ()

    Hey, wenn ich jetzt nach folgendem Beispiel vorgehe, zeigt der mir an das keine Datei gefunden wurde. Wenn ich den Pfad mit path als InitialDirectory deklariere, wird der Zugriff verweigert:

    VB.NET-Quellcode

    1. Dim fStream As New FileStream(path2, FileMode.Open)
    2. Dim br As New BinaryReader(fStream)
    3. Dim data(fStream.Length - 1) As Byte
    4. For i As Integer = 0 To fStream.Length - 1
    5. data(i) = br.ReadByte()
    6. Next
    7. br.Close()
    8. fStream.Close()
    9. TextBox4.Text = Hex(ofd.FileName)
    Geht nicht...immer wird der Zugriff verweigert. Ich möchte ja im Prinzip nur eine Datei mit dem FileDialog suchen und dann in Hex in der TextBox anzeigen lassen. Jetzt funktioniert nichtmal mehr der OpenFileDialog, weil vorher immer der Zugriff verweigert wird.
    ofd.FileName kommt dahin, wo bei dir path2 steht. Zeile 11 kannst du komplett entfernen, die macht nämlich keinen Sinn, da sie lediglich den Dateinamen in die Textbox schreibt, du willst aber den Inhalt. Um das zu erreichen kannst du z.B. in die Schleife noch TextBox4.Text &= data(i).ToSTring("X") schreiben.