Doubles aus Binärdateien in Textdateien speichern
-
Hallo zusammen,
nachdem dieser Eintrag im C++ - Forum nicht ganz richtig aufgehoben war, versuche ich es jetzt nochmal hier.
Zu meinem Problem: ich habe Binärdateien, in denen eine Reihe von double-Werten (Punktkoordinaten) gespeichert sind (sagen wir mal eine 800byte-Datei, also mit 100 doubles). Die Frage ist, wie kann ich diese in ein double-Array einlesen und danach dieses in einer lesbaren Form speichern (txt-file). Im Moment kommen absolute falsche (riesige) Werte raus.
Hier mein (nicht funktionierender) Code:
FILE * pFile; double x[50][2] buffer = (double*) malloc (sizeof(double)*100); pFile = fopen("...", "rb"); // read file to buffer (8byte-blocks) result = fread (buffer,8,100,pFile); for(int i=0;i<50;i++){ for(int j=0;j<2;j++) x[i][j] = buffer[2*i+j]; } fclose(pFile); // save data to textfile pFile = fopen ("...","w"); for(int i=0;i<50;i++){ fprintf(pFile,"%f\t%f\n", x[i][0], x[i][1]); } fclose(pFile);
Würde mich über eine Hilfestellung sehr freuen, habe auch schon mit dem fread() ein bisschen experimentiert, jedoch ohne Erfolg.
Beste Grüße,
ElMuesli.
-
Hi!
Hat es einen besonderen Grund, warum du den Umweg über das double x[50][2] Array gehst?
Schreib doch das direkt rein:fwrite(buffer,sizeof(double),100,fp);
Gruß,
B.B.
-
Achnee, du willst ja in eine Textdatei schreiben, ich bin ja voll der Blitzmerker!
Dann ist natürlich fprintf ok. Trotzdem bleibt der Umweg über das Array fragwürdig. Vermutlich möchtest du Spalten erzeugen?
Speicherst du so, guckst du:#define SPALTEN 5 #define ARRSIZ 100 int i=0; while(i<ARRSIZ) { if (!(i%SPALTEN) && i>0) fputc('\n',fp); // Schreibt einen Zeilenumbruch. fprintf(fp,"%.3lf ", buffer[i]); i++; }
Gruß,
B.B.
-
ElMuesli schrieb:
Im Moment kommen absolute falsche (riesige) Werte raus.
Sicher, dass der fread-Aufruf erfolgreich ist? Sonst steht im buffer nur Müll, der dann zu irgendwelchen falschen Zahlen interpretiert wird.
Und bist du sicher, dass die Binärdatei wirklich richtige doubles enthält? Hast du sie vorher mit fwrite geschrieben?
Und was ist der Typ von buffer? (er muss double* sein)
-
So wie es aussieht wurde die Binärdatei unter einer anderen Rechnerarchitektur erstellt. Deshalb muss der Buffer erst noch "angepasst" werden (wie mein Vorredner schon vermutete) - ich habe dafür eine Funktion in Aussicht.
Die Arrays hatte ich der Übersicht halber (das Programm deutlich umfangreicher als das, was ich hier gepostet habe...).
Danke schonmal für eure Hilfe, werde später schreiben, wie meine aktuelle Idee funktionierte.