Wie kann ich eine Datei "binär" in eine Variable speichern?

Stehfan

Grünschnabel
Hallo zusammen.

Ich suche mich schon seit Tagen durch Webseiten und Foren um heraus zu finden, wie ich eine Datei binär einlesen kann. Auf eine bestimmte Sprache zur Umsetzung habe ich mich noch nicht festgelegt, tendiere aber zu Ruby.

Folgendes Beispiel erklärt hoffentlich, was genau ich vorhabe:

Ich habe eine Datei hallo.txt in der das obligatorische "Hallo Welt!" steht. Schaue ich mir diese Datei nun mit einem Hexeditor in der Binäransicht an, werden mir die einzelnen Bits von "Hallo Welt!" angezeigt:

01001000 01100001 01101100 01101100 01101111 00100000 01010111 01100101 01101100 01110100

Das selbe möchte ich nun mit einem kleinen Programm durchführen:

  1. Datei einlesen
  2. Inhalt am besten direkt oder nach Umwandlung "binär" in eine Variable schreiben und dann mit dieser weiter arbeiten können.

Das sollte doch mit wenigen Befehlen möglich sein, oder?

Später möchte ich das selbe dann auch in die andere Richtung durchführen, also andere Binärdaten (z.B. die eines "Hallo zurück") wieder in eine hallo.txt schreiben.

Wie genau gehe ich vor? Welche Sprache empfiehlt sich und welche Befehle brauche ist?

Bin für jeden Denkanstoß dankbar.
 
Moin und Willkommen hier auf Tutorials.de !

Offen gestanden verstehe ich ganz und gar nicht, was Du da versucht ....

Da Du eine Textdatei hast, stehen dort die Zeichen selbstverständlich binär drin, Du kannst sie aber doch auch byteweise auslesen.
Die ersten acht bit "01001000" sind ja dezimal "72" oder hexadezimal "0x48" oder eben der Buchstabe "H" ...
Das ist alles äquivalent !

Wozu musst dass denn nun in binärer Form verarbeiten?

Und was meinst Du mit "welche Sprache / welche Befehle"?
Welche Programmiersprachen kennst Du denn ? ? ?

Gruß
Klaus
 
Moin und danke für deine Antwort.

Sagen wir es mal so:

Arbeitsbedingt kenne ich mich mit PHP einigermaßen gut aus (als Supporter, nicht als Entwickler. Fehlermeldungen im bestehenden Code verstehen und selbst beheben oder weiter leiten), da das ganze aber eine Desktopapplikation werden soll, muss ich mich so oder so in eine neue Sprache einarbeiten.

Und da mache ich es dann von der Anforderung abhängig, in welcher Sprache sich meine Anforderung am einfachsten umsetzen lässt.

Es geht mir weniger darum, das "H" wieder aus zu lesen sondern mehr darum, den gesamten Inhalt der Datei als eine Binärzahl zu haben und diese dann weiter zu verarbeiten. Wenn ich z.B. statt einer Textdatei ein Bild oder eine Audiodatei nehme (ich weiss, dass das eine ziemlich große Zahl werden wird), dann besteht der Inhalt ja weiterhin aus 1 und 0 und nicht mehr aus Buchstaben.

Wenn ich dann aber diese "Binärkette" auf einem anderen PC wieder als Datei schreibe, dann habe ich die ursprüngliche Datei wieder her gestellt (jedenfalls erhoffe ich mir das ganze so).
 
Hi

wenn es dir nur darum geht, den Inhalt woanders gleichwertig zu haben,
bleib bei den Byte. Geht genau so gut.

In Wirklichkeit hast du das Ganze ja als Binärzahl, es sind nur immer 8 Ziffern geblockt:
in ein Byte eben.

Wenn du die Binärzahl so haben willst, dass der Benutzer Nullen und Einsen sieht
musst du das mit jeweils 8 Buchstaben (bzw. Ziffern) machen, von denen jede ein Byte braucht.
Die Umrechnung wäre kein Problem, dein Speicherverbrauch würde sich aber eben verachtfachen.
 
Hi.

Das kannst du ziemlich mit jeder Sprache machen.

Du mußt nur jedes Byte in die Binärform kovertieren (dezimal => binär-String).

Datei einlesen, Schleife über jedes Byte, Funktion aufrufen, fertig.

Dir ist aber schon klar, dass sich dadurch die Datenmenge (so ziemlich genau ;)) verachtfacht?

Gruß
 
hmm,

wie gesagt: "01001000" = "72" = "0x48" = "H" ...

Was konkret in der Datei steht ist eigentlich eher unerheblich, wichtig ist, wie Du es in Deinen Programm interpretierst, darstellst oder was auch immer.

Den gesamten Dateiinhalt als EINE Zahl darstellen zu wollen, wird Dich, Deinen Rechner und uns alle hier schlichtweg überfordern :D

Programmiersprachen bieten halt die Möglichkeit eine Datei zeichenweise einlesen und dann als char-Array oder als String, aber auf Integer- bzw. BYTE-Array darzustellen.

Gruß
Klaus
 
Wahrscheinlich ist das, was ich vorhabe eh total schwachsinnig, vielleicht kommt aber auch etwas total tolles dabei raus ;)

Ich versuchs nochmal anders zu erklären, wahrscheinlich sagt ihr mir dann gleich, dass es schwachsinnig ist, aber dann muss ich mir darüber wenigstens keine weiteren gedanken mehr machen ;)

Nehme ich als Beispiel nur "Hallo" als Inhalt, dann sieht das ganze Binär ja wie folgt aus:

0100100001100001011011000110110001101111

ergibt dann dezimal

310872140911

Bei einer größeren Datei gibt es eine deutlich größere dezimal-Zahl, die man dann sicherlich in irgendeine (deutlich kürzere) mathematische Formel bringen kann.

Am Ende (also wirklich ganz am Ende, wenn das ganze überhaupt funktioniert, was ich rausfinden möchte) habe ich dann eine mathematische Formel, die mein Programm einliest. Aus der Formel lässt sich dann eine sehr große dezimal-Zahl errechnen, die wiederrum in binär umgewandelt wieder in eine Datei geschrieben wird.
 
Du willst eine math. Formel generieren, die als Ergebnis in Binär die gesamte Datei ergibt?
Wozu soll das eigentlich gut sein?

Zwei Problempunkte am Ganzen:
a) Die normalen Datentypen wie int usw. können nur sehr begrenzte Zahlen aufnehmen.
Über 8 Buchstaben/Byte wirst du nicht mit einer Variable kommen, und das musst du aber, um damit rechnen zu können.
Eine Mögliche Lösiung wäre die Verwendung von Libs wie GnuMP, die praktisch unbegrenzt große Variablen anbieten.
b) Aus einer Zahl eine math. Formel generieren?
Naja, "Zahl+0" ist ja einfach zu machen, aber sonst...nach welchen Kriterien soll die Formel zusammengestellt werden?
Der Computer hat ja kein Gehirn...

Aber nocheinmal: wozu soll das gut sein?

edit: Willst du die Datei damit speicherplatz-sparender machen?
Warum nicht fertige Libs für ZIP/RAR verwenden?
Oder, wenn man das selber programmieren will:
Der Huffmann-Algorithmus ist ein guter Einstieg.
 
Mir geistert seit Jahren die Idee durch den Kopf, dass es doch irgendwie möglich sein muss, eine größere Datei (z.B. ein 100 MB ISO einer Linux-Distribution) in eine Formel zu bringen.

Man überträgt dann nicht mehr die Datei sondern nur eine Rechnung, aus der dann die Ursprüngliche Datei wieder "berechnet" werden kann. Wie genau das ganze funktioniert wollte ich austesten, dazu brauche ich aber überhaupt erstmal die Möglichkeit, eine Datei in eine "Zahl" um zu wandeln und die "Zahl" dann später wieder in eine Datei.

Aber wahrscheinlich ist es am besten, wenn ich die Idee einfach begrabe :(
 
Zurück