Maison > développement back-end > C++ > 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
Libérer: 2024-11-09 20:45:02
original
640 Les gens l'ont consulté

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))
    {}
};
Copier après la connexion

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal