\0 als Stringende ignorieren
-
Guten Abend,
ich suche gerade eine möglichkeit Bilddaten im C++-Code abzuspeichern, um Bilder, die möglicherweise gelöscht wurden, automatisch wiederherstellen zu können. Ich habe auch die Möglichkeit gefunden, die Bilder in einem Binäreditor zu öffnen und die Hex-Codes zu exportieren.
Dadurch ergibt sich eine Zeichenkette die in etwa so aussieht:
"\x089\x050\x04E\x047\x00D\x00A\x01A\x00A\x000\x000\x000\x00D\x049\x048\x044...
Wenn man diese Zeichenkette abspeichert, klappt das Speichern des Bildes (theoretisch). Das Klappt auch, wenn ich das in einen neuen Hex-Editor kopiere und als "icon.png" abspeichere.
Praktisch sieht C++ \x000 als Stringende und bricht die Zeichenkette dort ab.
Somit ist meine Bilddatei fehlerhaft und kann nicht verwendet werden.Jetzt ist meine Frage, ob ich \0 als String-Ende ignorieren kann und beinhart "drüberzufahren". Da bei "\x000\x000\x000" 3 Byte mit dem Wert 0 geschrieben werden müssen.
Ich hoffe, jemand hat eine Idee
Mit freundlichen Grüßen
Last Dodo
-
Kommt drauf an, wie du die Daten speicherst..
Speichere sie nicht als C-String ab und alles ist gut.

Ansonsten zeig mal ein wenig Code.
-
Hat sich schon erledigt, danke.
Ich hatte es erst als std::string
jetzt hab ichs als C-String und gib dem write-Befehl einfach die zu schreibende Länge mit.Hier mein Code.
Kann getestet werden
Er erstellt einfach ein kleines PNG-Bild im Ausführungsordner.#include <fstream> using namespace std; int main(int argc, char* argv[]) { const char image[] = "SOMEBINARYCODE"; ofstream file("a.png", ios_base::binary); file.write(image, sizeof(image)); return 0; }//Edit: Bild daten entfernt