Maison > Article > développement back-end > Comment créer un flux d'entrée à partir de la mémoire en lecture seule en 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!