Binärdatei in C

Domsi

Erfahrenes Mitglied
Hi!

Ich soll für eine Aufgabe eine Binärdatei erstellen und verwalten.

Laut zahlreichen Internetseiten gibt man beim Öffnen mittels "wb" an, dass man die Daten binär speichern möchte.

Habe dazu folgenden Code verwendet:
Code:
 FILE * pFile;
  char buffer[] = { 'x' , 'y' , 'z' };
  pFile = fopen ( "test.bin" , "wb" );
  fwrite (buffer , 1 , sizeof(buffer) , pFile );
  fclose (pFile);

Wenn ich jetzt kompiliere und mein Programm starte, dann wird mir eine Datei "test.bin" angelegt aber wenn ich diese Daten mit dem Editor öffne kann ich darin "xyz" lesen.

Ich dachte mit "wb" erzeuge ich Binärdaten in der Datei! Dann sollte ich ja eigentlich die Daten auch nicht lesen können? Diese Daten sollten ja nur mit einem Hex-Editor lesbar sein.

Warum kann ich dann trotzdem "xyz" lesen in der Datei?

Anscheinend habe ich hier etwas nicht richtig verstanden! Könnt ihr mir bitte dabei helfen?

Lg, Domsi

Ps: Verwende GCC Kompiler. Getestet unter Windows und unter Linux. Bei beiden das selbe Ergebnis!
 
Zuletzt bearbeitet:
Ich dachte mit "wb" erzeuge ich Binärdaten in der Datei! Dann sollte ich ja eigentlich die Daten auch nicht lesen können? Diese Daten sollten ja nur mit einem Hex-Editor lesbar sein.

Auch der Hexeditor nimmt nur fopen...

Und "binär" wird eigentlich jede Datei gespeichert.

Der wirkliche Unterschied mit dem b ist:
1) wird ohne b ein Byte mit Wert 255 bzw. -1 als Dateiende betrachtet
Eignet sich also nicht für Dateien, bei denen -1 in der Mitte auch vorkommen kann.
Jedes Bild etc gehört da dazu.
2)Der Zeilenumbruch wird ohne b vom Betriebssystem während dem Schreiben automatisch in eine bestimmte andere Bytefolge umgewandelt und beim Einlesen wieder umgekehrt.
Mit b schreibst du wirklich die Bytes raus, die du angibst.
 
Der wirkliche Unterschied mit dem b ist:
1) wird ohne b ein Byte mit Wert 255 bzw. -1 als Dateiende betrachtet
Eignet sich also nicht für Dateien, bei denen -1 in der Mitte auch vorkommen kann.
Jedes Bild etc gehört da dazu.
Ich glaube du verwechselst das gerade mit Ctrl-Z (=26).

Beide von dir beschriebenen Verhalten treten übrigens in den meisten UNIXoiden Systemen meines Wissens nach nicht auf. Da ist es egal ob man die Datei im Binär- oder im Textmodus öffnet. Aus Portabilitätsgründen sollte man dennoch den im jeweiligen Fall sinnvolleren Modus einsetzen.

Grüße,
Matthias
 
Zurück