Zahl wird falsch in Binärdatei geschrieben

Post Reply
Message
Author
AEdm

Zahl wird falsch in Binärdatei geschrieben

#1 Post by AEdm »

Hi,
habe folgendes Programm:

Code: Select all

#include <stdio.h>

#define FILENAME "test.bin"

int main &#40;&#41;
&#123;
	int zahl=0x0a;
	FILE *pfile;

	pfile = fopen &#40;FILENAME,"w"&#41;;
	fwrite &#40;&zahl, sizeof&#40;zahl&#41;, 1,pfile&#41;;
	fclose&#40;pfile&#41;;

	return 0;
&#125;

Compiliere ich nun das ganze mit gcc unter linux, dann steht in der Datei "test.bin": 0a 00 00 00 (Was auch zu erwarten ist).

Wenn ich das ganze unter Windows mit dem gcc mache, steht da: 0d 0a 00 00 00

Wieso wird da ein "0d" davorgeschoben ??

Wenn ich in den Quellcode z.B. 0x0b eingebe, klappt es wunderbar.
Ist zwar kein direktes Linuxproblem, aber ich hoffe mit kann trotzdem jemand helfen.

Guest

Re: Zahl wird falsch in Binärdatei geschrieben

#2 Post by Guest »

AEdm wrote:Hi,
habe folgendes Programm:

Code: Select all

#include <stdio.h>

#define FILENAME "test.bin"

int main &#40;&#41;
&#123;
	int zahl=0x0a;
	FILE *pfile;

	pfile = fopen &#40;FILENAME,"w"&#41;;
	fwrite &#40;&zahl, sizeof&#40;zahl&#41;, 1,pfile&#41;;
	fclose&#40;pfile&#41;;

	return 0;
&#125;

Compiliere ich nun das ganze mit gcc unter linux, dann steht in der Datei "test.bin": 0a 00 00 00 (Was auch zu erwarten ist).

Wenn ich das ganze unter Windows mit dem gcc mache, steht da: 0d 0a 00 00 00

Wieso wird da ein "0d" davorgeschoben ??

Wenn ich in den Quellcode z.B. 0x0b eingebe, klappt es wunderbar.
Ist zwar kein direktes Linuxproblem, aber ich hoffe mit kann trotzdem jemand helfen.
das liegt an windows. das es nur bei 0x0a passiert liegt daran das es -zufälligerweise- der asci code für den zeilenvorschub. windows hängt im textmodus immer ein tabulator oder wagenrücklaufzeichen an. du kannst auf nummer sicher gehen indem du die ausgabe im binärmodus tätigst. also statt:

Code: Select all

pfile = fopen &#40;FILENAME,"w"&#41;;
nimm

Code: Select all

pfile = fopen &#40;FILENAME,"wb"&#41;;
damit wird die ausgabe in binärformat getätigt und es sollte klappen. der fehler lag halt darin das scheinbar standardmäßig im textmodus ausgegeben wird und windows da eigene zeichen einfügt. also merke: wann immer du daten ausgibst die reine zahlenwerte darstellen also kein text beinhalten solltest du die option "wb" benutzen in der das b für binär steht genau so geht auch "rb" was binäres lesen bedeutet.

AEdm

#3 Post by AEdm »

Super !!
Vielen Dank. Hat wunderbar geklappt.

Post Reply