moin...
so vorweg ich kompiliere das mit gcc, ist also c nicht c++ bevor nun einer meckert funktionen wie printf sollte man in verwendet da sie veraltet wären...
so mein problem -> ich schreibe 4 zahlen/bytes/chars/... mittels fputc() in eine datei und möchte sie dann in einem anderem programm wieder auslesen mittels fgetc()... das problem dabei ist nun aber, dass er anscheinend andere daten ausließt, als er schreibt... ich kann mir absolut nicht erklären wieso. :(
so geschrieben wirds da ->
und meine recht provesorische fputi funktion dazu ->
So die Ausgabe sieht dann in etwa so aus:
Bevor er die 4 Zahlen/Bytes/Chars/... also geschrieben hat war der Dateizeiger bei 37...
so nun die "auslesung":
und meine fgeti funktion dazu ->
die ausgabe dazu:
also auch hier ist der dateizeiger >vor< dem lesen auf 37 / beim 37. byte... danach ließt er 4 bytes / zahlen / chars / ... aus... und nun sieht man ja auch was mein problem ist, die 4 bytes sind andere als geschrieben wurden :)
wieso?
so vorweg ich kompiliere das mit gcc, ist also c nicht c++ bevor nun einer meckert funktionen wie printf sollte man in verwendet da sie veraltet wären...
so mein problem -> ich schreibe 4 zahlen/bytes/chars/... mittels fputc() in eine datei und möchte sie dann in einem anderem programm wieder auslesen mittels fgetc()... das problem dabei ist nun aber, dass er anscheinend andere daten ausließt, als er schreibt... ich kann mir absolut nicht erklären wieso. :(
so geschrieben wirds da ->
/* DEBUGE */
#ifdef DEBUGE
printf("Schreibe Dateilaenge an Position: %d\n", (int)ftell(archiv_file));
#endif
/* Dateilänge schreiben */
fputi(data_length, data_file);
und meine recht provesorische fputi funktion dazu ->
int fputi(int number, FILE *file)
{
/* Variablen */
int bytes[4];
/* Prüfe Dateistream */
if(file == NULL)
return -1;
/* Zahl in 4 Bytes aufteilen */
bytes[0] = number&0xFF;
bytes[1] = (number >> 8)&0xFF;
bytes[2] = (number >> 16)&0xFF;
bytes[3] = (number >> 24)&0xFF;
/* DEBUGE */
#ifdef DEBUGE
printf("Schreibe <%d>: %d - %d - %d - %d\n", number, bytes[0], bytes[1], bytes[2], bytes[3]);
#endif
/* Bytes schreiben */
fputc((char)bytes[0], file);
fputc((char)bytes[1], file);
fputc((char)bytes[2], file);
fputc((char)bytes[3], file);
/* Erfolgreich */
return 0;
}
So die Ausgabe sieht dann in etwa so aus:
Schreibe Dateilaenge an Position: 37
Schreibe <9688>: 216 - 37 - 0 - 0
Bevor er die 4 Zahlen/Bytes/Chars/... also geschrieben hat war der Dateizeiger bei 37...
so nun die "auslesung":
/* Dateilaenge auslesen */
/* DEBUGE */
#ifdef DEBUGE
printf("Lese Dateilaenge an Position: %d\n", (int)ftell(archiv_file));
#endif
data_length = fgeti(archiv_file);
und meine fgeti funktion dazu ->
int fgeti(FILE *file)
{
/* Dateistream prüfen */
if(file == NULL)
return -1;
/* Variablen */
int bytes[4];
int integer;
/* Bytes auslesen */
bytes[0] = (int)fgetc(file);
bytes[1] = (int)fgetc(file);
bytes[2] = (int)fgetc(file);
bytes[3] = (int)fgetc(file);
/* Bytes zu einer 32Bit Integer konvertieren */
integer = ((bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]));
/* DEBUGE */
#ifdef DEBUGE
printf("Lese <%d>: %d - %d - %d - %d\n", integer, bytes[0], bytes[1], bytes[2], bytes[3]);
#endif
return integer;
}
die ausgabe dazu:
Lese Dateilaenge an Position: 37
Lese <1179403647>: 127 - 69 - 76 - 70
also auch hier ist der dateizeiger >vor< dem lesen auf 37 / beim 37. byte... danach ließt er 4 bytes / zahlen / chars / ... aus... und nun sieht man ja auch was mein problem ist, die 4 bytes sind andere als geschrieben wurden :)
wieso?