ホームページ  >  記事  >  バックエンド開発  >  C で読み取り専用メモリから入力ストリームを作成する方法

C で読み取り専用メモリから入力ストリームを作成する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-09 20:45:02574ブラウズ

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

読み取り専用メモリからの入力ストリームの作成

ASCII 文字列を含む const char* ポインターが指すデータ バッファーがあります。 。データをコピーしたり変更したりせずに、ストリームであるかのように読み取りたいとします。

解決策

これを実現するには、カスタム ストリーム バッファーを作成します。その方法は次のとおりです。

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

membuf クラスには、const char* ポインターから読み取るストリーム バッファーが含まれています。 imemstream クラスは membuf を継承し、入力ストリームにするために必要な機能を追加します。

imemstream を使用するには、インスタンス化して次のように使用できます。

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

これは次のようになります。バッファからのデータを変更せずに、あたかもストリームであるかのように変換します。

以上がC で読み取り専用メモリから入力ストリームを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。