2016-07-22 36 views
2

Ich möchte serialisierte Datenkonvertierung in meiner Anwendung testen, derzeit ist das Objekt in Datei gespeichert und lesen Sie die Binärdatei und laden Sie das Objekt neu.Wie binäre Daten in String hart codieren

In meinem Unit Testfall möchte ich diesen Vorgang testen. Da die Dateioperationen teuer sind, möchte ich den binären Dateiinhalt im Code selbst fest codieren.

Wie kann ich das tun?

Zeit wie dieses Ich versuche,

std::string FileContent = "\00\00\00\00\00........."; 

und es funktioniert nicht.

+0

Verwenden Sie mit 'x' Präfix. z.B. '\ x00 \ x00' usw. – alexolut

+0

Oder oktal wie' "\ 0 \ 0 \ 0" 'usw. –

+0

Keiner der beiden obigen wird es zu einem String AFAIK machen. – lorro

Antwort

2

Sie haben Recht, dass ein String '\0' enthalten kann, aber Sie initialisieren ihn immer noch von const char*, die per definitionem bei der ersten '\0' stoppt. Ich würde Ihnen empfehlen, uint8_t[] oder sogar uint32_t[] zu verwenden (dh, ohne an std::string zu übergeben), selbst wenn die Sekunde möglicherweise bis zu 3 Bytes Overhead hat (aber es ist kompakter, wenn in der Quelle). Das ist z.B. wie X Bitmaps normalerweise gespeichert werden.

Eine andere Möglichkeit ist die base64-Kodierung, die druckbar ist, aber eine (relativ schnelle) Dekodierung benötigt.

Wenn Sie wirklich die const char[] auf eine std::string setzen wollen, konvertieren zuerst den Zeiger auf const char*, verwenden Sie dann den zwei Iterator Konstruktor std::string. Während es wahr ist, dass std::string'\0' halten kann, ist es ein Antipattern, um Binär in einer Zeichenfolge zu speichern, daher gebe ich nicht den genauen Code, nur den Hinweis.

2

Die folgenden sollten tun, was Sie brauchen, aber wahrscheinlich nicht empfohlen, da die meisten Menschen nicht erwarten würden, dass std::string Null-Bytes enthalten.

std::string FileContent { "\x00\x00\x00\x00\x00", 5 };