problem beim speichern von float in datei
-
Hallo,
ich habe ein sicherlich blödes Anfängerproblem. Ich möchte gerne Dateien erzeugen und lesen können die float oder double zahlen beinhalten. Dafür habe ich zum ausprobieren einfach mal versucht drei floats abzuspeichern und wieder einzulesen, kommt aber leider nur Müll raus, sowohl nach dem Schreiben als auch logischerweise beim wieder einlesen. Hier mein Code:
Schreiben:
void WriteData::write(std::string filename) { FILE * pFile; const char* file = filename.c_str(); float data[3] = {1.0,2.1,3.2}; pFile = fopen ( file , "wb" ); fwrite (data , 4 , 3 , pFile ); fclose (pFile); }Lesen:
void ReadData::read(std::string filename) { FILE * pFile; size_t result; const char* file = filename.c_str(); pFile = fopen ( file , "rb" ); if (pFile==NULL) {fputs ("File error",stderr); exit (1);} fseek (pFile , 0 , SEEK_END); dataSize = ftell (pFile); rewind (pFile); data = (float*) malloc (sizeof(float)*dataSize); if (data == NULL) {fputs ("Memory error",stderr); exit (2);} result = fread (data,1,dataSize,pFile); if (result != dataSize) {fputs ("Reading error",stderr); exit (3);} fclose (pFile); free (data); }Es wäre wirklich nett wenn mir jemand erklären könnte was ich nicht verstehe beim verarbeiten von floats. Nach dem schreiben steht ungefähr sowas in der Datei: €?ff@ÍÌL@
Vielen Dank für Eure Hilfe und liebe Grüße
-
Das ist ein klarer Fall für das C Forum.
Oder beim zweiten Blick doch nicht: Du versuchst ja anscheinend doch C++ zu machen (wegen std::string). Warum also die Frickelei mit C Ein/Ausgabe und malloc? Schmeiß alles weg, guck dir an wie man das in C++ macht und dann staune wie leicht das geht.
-
Kannst Du mir einen Tip geben wonach ich suchen soll? Also welcher Bibliothek...!
-
Nach dem schreiben steht ungefähr sowas in der Datei: €?ff@ÍÌL@
Weil du floats binaer abspeicherst, aber dein Editor versucht Text anzuzeigen.
-
Henrik_++ schrieb:
Kannst Du mir einen Tip geben wonach ich suchen soll? Also welcher Bibliothek...!
Google Suchworte:
C++
C++ Tutorial
C++ Basics
C++ file io
C++ containers tutorial
-
Danke Euch beiden!
-
Henrik_++ schrieb:
Kannst Du mir einen Tip geben wonach ich suchen soll? Also welcher Bibliothek...!
Versuch' es mal damit:
void WriteData::write( const std::string& filename ) { using namespace std; float data[] = {1.0,2.1,3.2}; ofstream file( filename.c_str() ); for( const float* src = data; src != data + sizeof(data)/sizeof(*data); ++src ) file << *src << " "; } void ReadData::read( const std::string& filename ) { using namespace std; vector< float > data; ifstream file( filename.c_str() ); for( float f; file >> f; ) data.push_back( f ); }Als includes benötigst Du dazu:
#include <iostream> #include <fstream> #include <string> #include <vector>BTW - wo lernt man eigentlich das mit FILE, seek, fputs usw.?
Gruß
Werner