1

バイトunsigned char *bufferで満たされたバッファがあります。sizeそこからストリームを開始したい。

バッファバイトをコピーする次のようにできます:

string s(bytes, bytes + size);
stringstream ss(s);

そのコピーなしでストリームを初期化できるのだろうか?

4

1 に答える 1

3

カスタムを実装してから、コンストラクターstreambufに渡す必要があります。istreamこれにより、他のストリームと同じように配列データにアクセスできるようになります。詳細については、次のリンクを参照してください。

  1. std :: streambuf
  2. std :: istream

Boostは、これを支援するためのiostreamsライブラリを提供します。特に、array_source標準配列をラップするためのクラスをすでに提供しています。次のコードサンプルは、これを実現する方法を示しています。

#include <cstdlib>
#include <iostream>
#include <string>

#include <boost/iostreams/stream_buffer.hpp>
#include <boost/iostreams/device/array.hpp>


namespace io = boost::iostreams;

int main(int argc, char* argv[]) {
    const char buffer[] = "buffer data\n";

    io::array_source src{ buffer, strlen(buffer) };
    io::stream_buffer<io::array_source> strbuf{ src };

    std::istream stream{ &strbuf };
    std::string line;
    std::getline(stream, line);
    std::cout << line << std::endl;
    return EXIT_SUCCESS;
}
于 2013-03-10T13:08:46.560 に答える