Datei binär einlesen (incl mehrerer Stringterminatoren) und in string wandeln
-
Hi,
nachfolgender Code liest eine Datei binär ein. Nun möchte ich die Daten gern in einen String umwandeln, jedoch wird beim Auslesen von memblock logischerweise beim ersten Nullterminator abgebrochen. Wie stelle ich es nun an, dass das Array der Länge size komplett (trotz mehrerer /x00 ) in den String geschrieben wird?
char * memblock; int size; fstream f(pathNfile, ios::in|ios::binary|ios::ate); // größe der datei ermitteln size = f.tellg(); //printf ("%i\n", size); // datei einlesen memblock = new char [size]; f.seekg (0, ios::beg); f.read (memblock, size); f.close(); string memStr(memblock);merci

-
verdammt... es ist schon spät.
die Lösung:
string memStr(memblock,size);
-
Oder doch lieber gleich:
std::string s(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>());
-
314159265358979 schrieb:
Oder doch lieber gleich:
std::string s(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>());Das hat zwar die gleiche Wirkung, macht jedoch intern was anderes. Wird dadurch deutlich lahmer sein, falls dies hier eine Rolle spielt.
-
Pffffff, eleganter, kurzer Code ist viel besser.
Abgesehen davon würde ich das holen der Größe in eine eigene Funktion auslagern:std::size_t filesize(std::ifstream& is) { auto const curr = is.tellg(); is.seekg(std::ios::end); auto const size = is.tellg(); is.seekg(curr); return size; }