Heim > Backend-Entwicklung > C++ > Wie erstelle ich einen Eingabestream aus dem Nur-Lese-Speicher in C?

Wie erstelle ich einen Eingabestream aus dem Nur-Lese-Speicher in C?

Susan Sarandon
Freigeben: 2024-11-09 20:45:02
Original
609 Leute haben es durchsucht

How to Create an Input Stream from Read-Only Memory in C  ?

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))
    {}
};
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage