char stringstream, geht das schöner?



  • Hallo!

    Mein Fileformat sieht am Beginn eines Files einen genau 1024 Byte großen
    Informationsblock vor. Das habe ich momentan so gelöst:

    // The info header
    const unsigned LEN(1024);
    char info[LEN];
    stringstream sstr;
    sstr << "Beispielstring: <" << einString << "> und <" << eineZahl << ">"<<endl;
    strncpy(info,sstr.str().c_str(),LEN);
    info[LEN-1]='\0';

    // Write the info header
    outFile.write(info,LEN);

    Gerade bei Zeichenketten gibts aber bekanntlich viele Möglichkeiten, das Ziel
    zu erreichen. Wie würde man denn diese Aufgabe kürzer und herzeigbarer lösen?

    lg
    bts



  • falls dein Outfile vom Typ fstream ist, kannst du auch direkt über die operatoren in die Datei schreiben, das heiß genau wie du das mit dem stringstream machst!
    kannst dir dann den rest schon mal sparen und alles sieht schon mal besser aus 🙂



  • newbie1243 schrieb:

    falls dein Outfile vom Typ fstream ist, kannst du auch direkt über die operatoren in die Datei schreiben, das heiß genau wie du das mit dem stringstream machst!
    kannst dir dann den rest schon mal sparen und alles sieht schon mal besser aus 🙂

    Ja, aber was ich da reinschreibe, hat eine variable Größe. Wie würde ich also
    auf die Art sicherstellen, daß der Infoblock exakt 1024 Bytes lang ist?

    lg
    bts



  • Übrigens steht zwischen dem String und dem LEN-1 einfach Müll. Initialisiere info.

    Edit: Stimmt natürlich nicht, wird mit 0 gepaddet.



  • Was steht denn in dem Infoblock drin? Vielleicht kann man den besser über eine Struktur abbilden, für die man die stream operatoren << und >> überlädt.



  • DocShoe schrieb:

    Was steht denn in dem Infoblock drin? Vielleicht kann man den besser über eine Struktur abbilden, für die man die stream operatoren << und >> überlädt.

    In einer Toolchain werden mehrfach Files gelesen/geschrieben. Das Info-Element
    beinhaltet da verschiedene Daten. Meinst Du sowas?

    struct InfoBlock
    {
    char text[1024];
    operator<<(string s)
    {
    somehow append s to text;
    }
    };

    Das wäre natürlich eine Möglichkeit. Ist auch beim Einlesen sauberer.

    lg
    bts


Anmelden zum Antworten