wie benutzt man ifstream?
-
Ich habe eine Datei an der an erster Stelle ein signed short int gespeichert ist - wie kann ich diesen signed short int auslesen?
ich hab es so versucht:
std::ifstream File(Filename.c_str(), std::ios::binary); short int x = 0xFFFF; File>>x;
in x steht aber nachher wieder 0xFFFF und in der Datei steht 0x1000 - was mache ich falsch?
meine Hacklösung (die ich schon öfter eingesetzt habe sieht so aus:
ifstream File(Filename.c_str(), ios::binary); if(!File) // konnte Datei geoeffnet werden? { throw FileNotFoundException(Filename); } File.seekg(0, ios::end); long fileSize = File.tellg(); File.seekg(0, ios::beg); char *pBuffer = new char[fileSize]; File.read(pBuffer, fileSize); File.close(); const char * ptr = pBuffer; short int x = *(*short)ptr;
Das kanns aber wohl nicht sein....
-
Aeh...
File.read(reinterpret_cast<char*>(&x), sizeof(short));
Sowas?
-
Ist schon recht nah dran.
std::ifstream File(Filename.c_str(), std::ios::binary); short int x = 0xFFFF; File.read(reinterpret_cast<char*>(&x), sizeof(x));
-
Klassisches Missverständnis des Binary-Flags Das bewirkt nicht, dass Daten binär gelesen oder geschrieben werden, sondern umgeht nur das Code Conversion Facet.
Unter Windows würde dann z.B. nicht mehr automatisch ein '\n' in #13#10 umgewandelt werden beim Schreiben und genauso andersrum beim Lesen. Unformatted IO mit read ist genau die Lösung.
-
Unformatted IO mit read
und wie geht das?
-
Vertexwahn schrieb:
Unformatted IO mit read
und wie geht das?
steht schon 2 mal hier im thread.
-
oh... also wenn ich mir read etwas lese, dann ist das immer Unformatted IO? ich dachte ich muss dem read irgendwelche Flags mitgeben, die im sagen das es Unformatted sein soll - dann kann ich mir ja das Flag std::ios::binary sparren, weil das keine Auswirkung auf read hat oder?
-
Kannst du nicht - denn read liest aus der internen Repräsentation des Streambuffers unformatiert. Der Streambuffer wandelt aber erst die externe Repräsentation der Datei in die Interne um - und zwar mit oder ohne Code Conversion Facet, je nach Einstellung des binary-Flags.
-
danke