Binärwert einer Datei
lima-city → Forum → Programmiersprachen → Basic
array
beispiel
buchstabe
byte
code
dank
datei
editor
funktion
http
list
liste
null
problem
string
tabelle
umwandeln
zahl
zeichen
ziffer
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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? -
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
-
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? -
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 -
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 -
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 -
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 -
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. -
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.
-
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()
-
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? -
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. -
Juhu danke Leute, endlich es funktioniert, ihr seid echt die besten, danke
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage