[Erledigt] Binär-Datei einlesen
-
Das ist natürlich korrekt, dass es dann ein float sein sollte.
Ich habe bisher mehrere Ansätze ausprobiert.
Es funktioniert leider auch mit einem float nicht.
-
Schreibe erstmal einen Test, der einen float in eine (Binär)Datei schreibt und korrekt wieder liest.
Erst wenn das funktioniert kannst du dich um die Byteorder der Matlab-floats kümmern.
-
Skywalker077 schrieb:
Hallo zusammen,
Nur wenn ich per C eine Datei schreibe mit Float Werten kann ich diese wiederHabe ich bereits getan. Das klappt mit diesem Code wunderbar.
-
Rede nicht lange rum, sondern zeige den Code, der angeblich nicht läuft, und nicht den Code, der läuft.
-
Okay,
zuerst das zum schreiben:int main(void) { FILE *Datei; float wert; float i; Datei = fopen("Signal.txt","wb"); if(Datei == NULL) { printf("Die Datei konnte nicht geoeffnet werden"); } else { //Es soll ein Wert in die Datei geschrieben werden. i = 5.5; wert = &i; printf("Dieser Wert wird jetzt geschrieben: %f",*wert); fwrite(wert,sizeof(wert),1,Datei); fclose(Datei); } return 0; }
gelesen wird hiermit:
int main(void) { FILE *Datei; float wert; int k; Datei = fopen("Signal.txt","rb"); if(Datei == NULL) { printf("Die Datei konnte nicht geoeffnet werden"); } else { //Es soll gelesen werden k = fread(&wert,sizeof(wert),1,Datei); printf("Es wurden %d Bytes gelesen\n",k); printf("Das steht in der Datei: %f",wert); fclose(Datei); } return 0; }
Das Schreiben und Einlesen funktioniert bei diesen Schnipseln.
Ich schaffe es jedoch nicht, den einlese Code zu benutzen fuer mein Problem mit meine Messdaten.
-
Deine Schreib-Funktion ist Müll, da wird alles Mögliche in die Datei geschrieben, aber nicht ein float. Schaue dir die Compilerwarnungen an.
-
Ich kann dir leider nicht folgen.
Codeblock mit MinGW Compiler bei folgenden Flags:
-ansi
-Wall
-pedanticgibt bei dem Code keinen Fehler/Warnung aus.
Der Einlese Teil funktioniert. Er liest die Zahl(en) ein, die ich vorher schreibe.
-
Trotzdem ist das Müll.
float wert; float i; .... i = 5.5; wert = &i; // was soll das sein? Du weist einer float-Variablen eine Adresse zu
i = 5.5; wert = i; // oder gleich 5.5 printf("Dieser Wert wird jetzt geschrieben: %f", wert); fwrite(&wert,sizeof(wert),1,Datei);
-
Aber mal zu deinem ersten Post.
Mit
float wert[4]; // keine Zeiger
in Zeile 4 und
fread(wert,sizeof(wert[0]),4,Datei);
in Zeile 16, werden auch 4 Werte eingelesen (so sie denn in der Datei sind).
-
Das mit dem Zeiger war mein Fehler. Danke
Ich denke jetzt habe ich die Werte im Little Endian Format.
Sie werden leider im Big Endian gespeichert.E: ERLEDIGT!
Danke