char*からistreamを取得する 質問する

char*からistreamを取得する 質問する

ライブラリから受け取る char* とデータ長があり、そのデータを istream を受け取る関数に渡す必要があります。

文字列ストリームを作成できることはわかっていますが、すべてのデータがコピーされます。また、これは zip ファイルなので、データには必ず 0 が含まれます。文字列ストリームを作成すると、最初の 0 までのデータが取得されると思います。

すべてのデータをコピーせずに、char* とそのサイズから istream を作成する方法はありますか?

ベストアンサー1

非推奨ではないメソッドは次のとおりですウェブ上で見つけた、独自のstd::streambufクラスを派生させる必要がありますが、簡単で動作するようです:

#include <iostream>
#include <istream>
#include <streambuf>
#include <string>

struct membuf : std::streambuf
{
    membuf(char* begin, char* end) {
        this->setg(begin, begin, end);
    }
};

int main()
{
    char buffer[] = "I'm a buffer with embedded nulls\0and line\n feeds";

    membuf sbuf(buffer, buffer + sizeof(buffer));
    std::istream in(&sbuf);
    std::string line;
    while (std::getline(in, line)) {
        std::cout << "line: " << line << "\n";
    }
    return 0;
}

出力は次のようになります:

line: I'm a buffer with embedded nullsand line
line:  feeds

おすすめ記事