Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

1

11.05.2011, 22:50

[C++] Datei binär speichern?

Hi an alle,

ich wollte mich mal ein wenig an die Datenkompression ranwagen, nur bei meinen ersten Versuchen klappt es irgendwie nicht, einfache Daten wie z.B. eine einfache "0" als binäre Zahl zu speichern. Normalerweise müsste die Datei ja dann nur ein Bit groß sein und nicht ein Byte oder?
Ich habe schon ein wenig rum geschaut und nur gefunden, dass man die Daten mit write in die Datei speichern muss.

Hoffentlich könnt ihr mir weiter helfen.


MfG


Jawaiica'
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

11.05.2011, 22:54

Du musst die Datei einfach binär öffnen und dann kannst du da byte Weise reinschreiben. Siehe dazu hier:
http://www.cplusplus.com/reference/iostream/fstream/fstream/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

11.05.2011, 22:57

Normalerweise müsste die Datei ja dann nur ein Bit groß sein und nicht ein Byte oder?

Wie kommst du denn da drauf?

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

4

11.05.2011, 23:00

Byte weise? Aber das heißt doch dann, dass wenn ich vier Nullen in die Datei schreiben würde, würde ich eine Daten von der Größe 4 Byte erhalten statt 4 Bit oder nicht?
Wie spart man denn Speicher, wenn man z.B. Wörter in binär Codes umwandelt und die Datei dann gleich groß ist?

@ dot:
Naja ich weiß nicht. Ich habe ein wenig rum gegoogled und kam dann auf ein paar Seiten wo stand, dass ein die "0" und "1" nur ein Bit groß sind =/
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

11.05.2011, 23:04

Aber eine Datei ist nunmal in Bytes und nicht in Bits unterteilt ;)
Natürlich hindert dich aber niemand daran 8 bools in ein byte zu packen. Musst du dann halt nur entsprechend die bits shiften.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

11.05.2011, 23:12

@ dot:
Naja ich weiß nicht. Ich habe ein wenig rum gegoogled und kam dann auf ein paar Seiten wo stand, dass ein die "0" und "1" nur ein Bit groß sind =/

Um ja, um etwas was entweder 0 oder 1 sein kann darzustellen braucht man nur ein Bit. Und jetzt google mal danach was der Unterschied zwischen Binärmodus und Textmodus ist ;)

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

7

11.05.2011, 23:14

Okay^^ Ich versteh das jetzt noch weniger als vorher :D:D
Wie funktioniert denn dann mit dem Speicher sparen? Ich hab mir jetzt ein paar Algorithmen angeguckt gehabt ( z.B. den Huffman Algorithmus ) und am Ende stehen da ja ne reihe von Nullen und Einsen.
Man spart dann also nur speicher, weil eine "Abkürzung" von 101 kleiner ist als ein Wort wie z.B. Schule? Oder macht man das doch irgendwie anders? ?(

MfG Jawaiica'
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

8

11.05.2011, 23:20

Byte weise? Aber das heißt doch dann, dass wenn ich vier Nullen in die Datei schreiben würde, würde ich eine Daten von der Größe 4 Byte erhalten statt 4 Bit oder nicht?
Wie spart man denn Speicher, wenn man z.B. Wörter in binär Codes umwandelt und die Datei dann gleich groß ist?

@ dot:
Naja ich weiß nicht. Ich habe ein wenig rum gegoogled und kam dann auf ein paar Seiten wo stand, dass ein die "0" und "1" nur ein Bit groß sind =/

Ich glaub da hast du was falsch verstanden. Zunächst einmal kannst du davon ausgehen das sowieso sämtliche Daten auf deinem Rechner binär gespeichert sind (wie auch sonst). Demnach ist auch eine Textdatei eine Binärdatei.

Als nächtes musst du dir klar machen das du nicht einzelne bits speichern kannst, sondern immer mindestens ein Byte (so gut wie immer 8 bit), d.h. ein gewisses "Paket" an Informationen. Übrigens sind 0 und 1 nicht ein Bit groß, 0 und 1 sind bloß Zeichen die normalerweise für die Zustandsangabe von einem Bit benutzt werden. Speicher kannst du so nicht direkt sparen, aber Informationen lassen sich als Zahlen meist kompakter Ausrücken als mit Worten (wenn man eine Textdatei anlegt will man ja das diese hinterher auch lesbar sind, wodurch viel Kram wie Steuerzeichen wie \r, \l oder \t oder Syntax Zeichen wie =, womöglich noch Kommentare oder Ähnliches in der Datei landet). Auch kriegt man Zahlen in Binärform in deutlich weniger Raum unter als Zahlen in Klartext (zB. kriegt man auf 1 byte nur die Ziffer '0' bis '9', aber die Zahlen 0 bis 255).

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

9

11.05.2011, 23:34

Zitat

Auch kriegt man Zahlen in Binärform in deutlich weniger Raum unter als Zahlen in Klartext
Und wie funktioniert das dann? Also konvertiert man ein Wort in eine Zahl und spart dann speicher indem man dieses Wort dann als Zahl abspeichert?
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

10

12.05.2011, 07:22

Und wie funktioniert das dann? Also konvertiert man ein Wort in eine Zahl und spart dann speicher indem man dieses Wort dann als Zahl abspeichert?

Also der Computer Speichert eh alles (also auf der Festplatte) Binär ab. Die kleineste Einheit ist ein Bit hat den zustand 0 oder 1 dann kommt das Byte es besteht aus 8 Bits. Durch die Kombination von Nullen und Einsen bekommt man die möglichkeit 256 (0-255) verschiedene Zustände zu erreichen. Dadurch wird dann z.B. ein Buchstabe oder eine Zahl Codiert (Stichwort ASCII Tabele). Soviel dazu hoffe ist eingiermaßen Verständlich.

DatenKomprimierung erreicht man jetzt z.B. auf der Ebene der Nullen und Einzen in dem mit irgendwelchen Algorithmen einpaar Nullen und Einsen weggelassen werden.

Ein anderes Beispiel wäre z.B. wenn du Nur Text haben willst ohne groß und kleinschreibung könntest du das Alphabet für dich neu Kodieren (0000 = a ,0001 = b , 0010 = c usw.) mit nur 4 Bit (32 mögliche kombination) so kannst du dann in ein Byte 2 Buchstabn bekommen.

Ich hoffe ich habe dich nicht wieder noch mehr verwirt :)

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige