\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


Anmelden zum Antworten