Erstellen eines Eingabestreams aus dem Nur-Lese-Speicher
Sie haben einen Datenpuffer, auf den ein const char*-Zeiger zeigt, der eine ASCII-Zeichenfolge enthält . Sie möchten die Daten wie einen Stream lesen, ohne sie zu kopieren oder zu ändern.
Lösung
Um dies zu erreichen, können Sie einen benutzerdefinierten Stream-Puffer erstellen. So geht's:
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); this->setg(p, p, p + size); } }; struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size), std::istream(static_cast<std::streambuf*>(this)) {} };
Die membuf-Klasse enthält den Stream-Puffer, der vom const char*-Zeiger liest. Die imemstream-Klasse erbt von membuf und fügt die notwendige Funktionalität hinzu, um daraus einen Eingabestream zu machen.
Um imemstream zu verwenden, können Sie es instanziieren und wie folgt verwenden:
imemstream in(data, size); in >> value;
Dies lautet die Daten aus dem Puffer, als wäre es ein Stream, ohne sie zu verändern.
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Eingabestream aus dem Nur-Lese-Speicher in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!