kostenloser Webspace werbefrei: lima-city


Binärwert einer Datei

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    monlisi

    monlisi hat kostenlosen Webspace.

    Hallo,

    Ich schreibe ein Programm in Visual Basic .Net 2008 aber komme nicht weiter, mein Problem:

    ich will eine beliebige Datei Binär(verbessert mich wenn das was anderes als 1 und 0 ist) einlesen. Und dass dann in eine Textdatei speichern. Also sollte in der Textdatei dann halt sowas stehen: 01100010011010010111010001110100 usw...

    wie geht das? hoffe ihr könnt mir helfen, danke schonmal
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Die Antwort wird Dir vielleicht nicht viel weiterhelfen aber ich glaube Du suchst einen Hexadezimal Editor

    http://de.wikipedia.org/wiki/Hex-Editor :angel:
  4. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    Du liest die Datei binär ein (-> System.IO.BinaryReader), dann hast du ein Bytearray.
    Jedes Byte kannst du als Hexadezimalzahl anzeigen lassen.
    Und diese Hexadezimalzahlen kannst du dann in 0 und 1 umwandeln lassen, aber diese Funktion musst du selbst schreiben.
    -> http://de.wikipedia.org/wiki/Hexadezimal


    Beitrag geändert: 16.11.2008 13:31:04 von cbhp
  5. Autor dieses Themas

    monlisi

    monlisi hat kostenlosen Webspace.

    Hallo und danke für die Antworten.

    Ich hab dass jetzt versucht und dass mit dem Hexadizmal wert anzeigen funktioniert ganz gut, aber ich finde nicht wie man hex zu binär umwandeln kann, dezimal zu binär ist kein problem scheinbar, aber mit hex ist da nichts zu finden.

    Ich müsste eben den Binärcode einer Datei in einer Textbox darstellen, und diesen wert dann wieder in eine andere Datei schreiben, sodass wenn man den binärcode nicht verändert praktisch nur eine datei kopiert wird. Hab ich mich da an was unmögliches rangemacht oder bin ich zu blöd dafür?
  6. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    Wie gesagt, du musst dir selbst eine Funktion schreiben, die dir Hex-Werte in Dual-Zahlen (0,1) umwandelt.
    Die Tabelle findest du hier:
    http://de.wikipedia.org/wiki/Zahlbasiswechsel#Umrechnung_f.C3.BCr_einfache_Spezialf.C3.A4lle

    Beispiel:

    Zeichen: A
    Dezimal: 65
    Hexadezimal: 41
    Binär/Dual: 01000001
    Oktal: 101
  7. Autor dieses Themas

    monlisi

    monlisi hat kostenlosen Webspace.

    ok danke, ich hab im internet diese Funktion gefunden:
    Public Function cBIN(ByVal iC As Integer) As String
            Dim X As Long, Y As Long, bC As Byte
            cBIN = ""
            X = 256
            For Y = 1 To 8
                bC = 0
                X = X / 2
                If iC >= X Then
                    bC = 1
                    iC = iC - X
                End If
                cBIN = cBIN & bC
            Next Y
            TextBox1.Text = TextBox1.Text & (cBIN)
        End Function


    Den muss ich aber mit nem integer füttern, und wenn ich eine Datei binär öffne und dann in Hex darstelle bekomme ich immer ein paar buchstaben da drin. Aus hexeditoren kenn ich dass ja aber was haben buchstaben denn in einem Zahlensystem zu suchen?
  8. In den Hex Zahlen (eigentlich Hexadezimal Zahlen) befinden sich Buchstaben, da sie als Basis 16 haben. Da es aber nur 10 verschidene Ziffern gibt, hat man halt noch die ersten 6 Buchstaben des Alphabetes genommen um Hexadezimal Zahlen darzustellen.

    Eine Hexadezimal Zahl rechnest du wie folgt in eine Dezimal Zahl um:

    1. Ziffer * 16 + 2. Ziffer

    Sowas ist aber bestimmt auch bestimmt bei Wikipedia erklärt.

    Ach ja, auch wenn es jetzt eigentlich logisch sein sollte. Hier noch die Werte der Buchstaben:
    A = 10
    B = 11
    C = 12
    D = 13
    E = 14
    F = 15
  9. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.


    Den muss ich aber mit nem integer füttern, und wenn ich eine Datei binär öffne und dann in Hex darstelle bekomme ich immer ein paar buchstaben da drin. Aus hexeditoren kenn ich dass ja aber was haben buchstaben denn in einem Zahlensystem zu suchen?


    Zu faul, selber eine simple Funktion zu schreiben?


    Wie gesagt, du musst dir selbst eine Funktion schreiben, die dir Hex-Werte in Dual-Zahlen (0,1) umwandelt.
    Die Tabelle findest du hier:
    http://de.wikipedia.org/wiki/Zahlbasiswechsel#Umrechnung_f.C3.BCr_einfache_Spezialf.C3.A4lle

    Beispiel:

    Zeichen: A
    Dezimal: 65
    Hexadezimal: 41
    Binär/Dual: 01000001
    Oktal: 101


    Weiteres Beispiel:
    Zeichen: Z
    Dezimal: 90
    Hexadezimal: 5A
    Binär/Dual: 01011010
    Oktal: 132


    Du ersetzt also die Hexadezimal-Zahl 0 durch Binär 0000,
    die Hex-Zahl 1 durch Binär 0001,
    die Hex-Zahl 2 durch Binär 0010,
    die Hex-Zahl 5 durch Binär 0101,
    die Hex-Zahl A durch Binär 1010 usw.

    Dies kannst entweder durch Suchen&Ersetzen machen oder du schreibst dir eine Formel dafür.
    Wobei man bei 16 Zahlen ja zur Einfachheit auch ein Array nehmen kann.


    Beitrag geändert: 18.11.2008 17:27:41 von cbhp
  10. Sorry kenne mich mit Visual Basic nicht so aus, aber in C# gibts da eine Funktion Convert.ToString(x, 2) die dir das Byte x als Binär (2) zurück gibt. Evtl. gibts die ja auch in VB ;-)

    Grüßle


    Beitrag geändert: 18.11.2008 17:44:35 von scout
  11. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    scout schrieb:
    Sorry kenne mich mit Visual Basic nicht so aus, aber in C# gibts da eine Funktion Convert.ToString(x, 2) die dir das Byte x als Binär (2) zurück gibt. Evtl. gibts die ja auch in VB ;-)

    Grüßle


    Na klar gibts diese Funktion auch in VB .NET, weil diese Funktion aus dem .NET Framework stammt, das auch C# nutzt.

    Beispiel:
    ' 90 (dezimal) = Z (ASCII) = 5A (Hexadezimal)

    Dim SingleByte As Byte = 90
    Dim HexString As String = SingleByte.ToString("X2" )

    ' HexString enthält nun "5A"

    Das X2 konvertiert ein Byte in eine zweistellige Hexadezimal-Zahl.


    Beitrag geändert: 18.11.2008 17:44:53 von cbhp
  12. Autor dieses Themas

    monlisi

    monlisi hat kostenlosen Webspace.

    Ok super, danke für eure Hilfe, hab jetzt alles geschaft, nur dass ich ein neues Problem habe. Ich öffne ja die datei binär, habe einen bytearry, wandle diesen in hexadezimalzahlen um, diese in dualcode ... dann bastle ich an dem rum .... dann wandle ich den binärcode wieder um in hexcode und den in bytes. Bisdaher funktioniert dass ganz gut. Nur muss ich jetzt die bytes in die Datei bekommen. Aber ich habe sie nicht in einem Array() as byte sondern in einer List (of Byte). Ja ich weis dumme idee. Aber in einer Liste gibt es dass bequeme listenname.add("blabla") das ich in verschieden schleifen brauche. Gibt es soetwas auch für einen array? wenn ich den array einfach so deklariere:

    dim array(liste1.count) as byte

    dann ist die ausgegebene datei fehlerhaft (nein ich verändere garnichts an dem binärcode und in der liste stimmen di bytes noch mit den ausgelesenen überein).Ich suche also nur etwas um entweder ne list(of byte) in nen array zu bekommen oder an nem array() sowas wie .add machen zu können. Ich hoffe ihr versteht mein problem und ich wär euch echt dankbar wenn ihr mir da noch helfen könntet.
  13. Vielleicht erklärst du einfach mal grob, was du genau vor hast, weil ich sehe in dem was du machst keinen wirklichen Sinn. Vielleicht kann man dir dann zu einem besseren/einfacheren Lösungsansatz verhelfen.
  14. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.


    monlisi schrieb:
    dim array(liste1.count) as byte


    So wie du das machst würde das nie funktionieren.

    So aber geht's:

    Dim ByteList As New List(Of Byte)
            'blablabla
            ByteList.Add(1)
            'blablabla
            Dim ByteArray As Byte() = ByteList.ToArray()
  15. Autor dieses Themas

    monlisi

    monlisi hat kostenlosen Webspace.

    Danke, endlich leufts

    Auf http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm wird einem gezeigt wie man binärcode in hex umwandelt. Funktioniert aber auch wieder nicht.
    Man hat dann eine dezimalzahl und kann diese dann ganz einfach an Hex() übergeben. Aber der Hexwert stimmpt nicht mit dem zuvor ausgelesenen überein. Die dezimalzahl die ich rausbekomme stimmp da ich sie mit der von der seite verglichen habe. Ist Hex dafür die falsche funktion?
  16. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    Die simple Hex() Funktion lässt eine voranstehende Null entfallen, so dass der Hexwert von der Dezimalzahl 11 dann B ist statt 0B.
    Um immer den korrekten zweistelligen Hexadezimalwert zu erhalten, gibt's eben die erweiterte Funktion:

    Dim SingleByte As Byte = 90
    Dim HexString As String = SingleByte.ToString('X2' )


    ...oder du prüfst selbst, ob der Hexwert einstellig ist und hängst ggf. eine Null vorne an.

    Außerdem musst du jedes Byte einzeln umwandeln lassen.
  17. Autor dieses Themas

    monlisi

    monlisi hat kostenlosen Webspace.

    Juhu danke Leute, endlich es funktioniert, ihr seid echt die besten, danke
  18. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!