ofstream: int soll wirklich sizeof(int) lang sein...
-
Hi
ich wollte in einem Programm eine art Datenbank mit wahlfreien Zugriff erstellen...
nun hab ich aber folgendes Problem: wenn ich ein paar int's schreiben will, z. B. 10 und 23400:
int Zahl1 = 105; int Zahl2 = 23400; File.write((char*) (&Zahl1), sizeof(int);
steht in der Datei anschließend folgendes drin:
10523400
Das Problem dabei: wenn ich die beiden Zahlen wieder aus der Datei lesen will
int Buffer; File.read((char*) (&Buffer), sizeof(int) );
dann liest er nicht nur die 105 in die Datei, sondern viel mehr (zumindest ist der Output anschliessend irgend eine ziemlich hohe Zahl.... Also meine Frage: wie bring schaff ich's dass beim Schreiben/Lesen der Datei genau sizeof(int) Bytes geschrieben/gelesen werden
BTW: ist ein vereinfachtes Beispiel, in Wirklichkeit schreibe ich structs mit verschiedenen Datentypen (int, char[20] 2 floats), aber das duerfte doch eigentlich keinen Unterschied machen, oder?
-
die datei als binary öffnen?
-
hmm... das tu ich schon (sowohl beim schreiben als auch beim lesen), aber das ganze geht trotzdem nicht...
-
Warum wandelst du das ganze eigentlich in einen char * um? Ich kenn mich mit write nicht sonderlich aus und habe grad keine Hilfe hier, aber entweder musst du das ganze vorher in einen char * umwandeln (mit stringstreams oder sprintf) oder du benutzt den operator >> .
-
Original erstellt von <KPC>:
Warum wandelst du das ganze eigentlich in einen char * um? Ich kenn mich mit write nicht sonderlich aus und habe grad keine Hilfe hier, aber entweder musst du das ganze vorher in einen char * umwandeln (mit stringstreams oder sprintf) oder du benutzt den operator >> .ne alles quatsch.
-
Original erstellt von <KPC>:
Warum wandelst du das ganze eigentlich in einen char * um? Ich kenn mich mit write nicht sonderlich aus und habe grad keine Hilfe hier, aber entweder musst du das ganze vorher in einen char * umwandeln (mit stringstreams oder sprintf) oder du benutzt den operator >> .Ich muss ihn char* umwandeln weil der 1. Parameter von write (und read) nunmal einen char* erwartet.... und vor allem hab ich, als ich nach einer Beschreibung davon folgendes Beispiel gefunden (zu finden bei: http://www.cppreference.com/cppio_details.html#read))
struct { int height; int width; } rectangle; input_file.read( (char *)(&rectangle), sizeof(rectangle) ); if( input_file.bad() ) { cerr << "Error reading data" << endl; exit( 0 ); }
da dieses Biespiel dem was ich brauch doch ziemlich aehnlich sieht (ich will ja auch structs lesen) hab ich mir gedacht das sei der beste Weg....
-
beispiel==mist
member alignment usw.
sowas wäre eigentlich doch perfekt für den >> oeprator
binärdateien sind immer so eine besondere sache.
kann jetzt leider nicht ausführlicher schreiben /unterricht (=fad ... fragebogen mit excel auswerten)
-
hmm... also ich muss mich entschuldigen, war mein Fehler: hab die Daten nicht mit write() geschrieben sondern mit dem >> Op....
@davie:
ich kann mir grad nicht vorstellen wie du das mit dem >> Op und ohne ios::binary machen willst wenn ich wahlfreien Zugriff brauchelass mich aber gerne eines Besseren belehren