Maison  >  Article  >  développement back-end  >  Comment créer un flux d'entrée à partir de la mémoire en lecture seule en C ?

Comment créer un flux d'entrée à partir de la mémoire en lecture seule en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 20:45:02572parcourir

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

Création d'un flux d'entrée à partir de la mémoire en lecture seule

Vous disposez d'un tampon de données pointé par un pointeur const char* contenant une chaîne ASCII . Vous souhaitez lire les données comme s'il s'agissait d'un flux, sans les copier ni les modifier.

Solution

Pour y parvenir, vous pouvez créer un tampon de flux personnalisé. Voici comment :

#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))
    {}
};

La classe membuf contient le tampon de flux qui lit à partir du pointeur const char*. La classe imemstream hérite de membuf et ajoute les fonctionnalités nécessaires pour en faire un flux d'entrée.

Pour utiliser imemstream, vous pouvez l'instancier et l'utiliser comme ceci :

imemstream in(data, size);
in >> value;

Ceci se lira les données du tampon comme s'il s'agissait d'un flux, sans le modifier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn