2011-11-15 8 views
5

たとえば、std::vector<uchar>の一部を作成してopenCV imencodeと入力しました。今度は、例えばhttp_libにストリームを流して、ある種のostream(ostringstream)を流すことができます。または、ofstreamでプログラムをデバッグするときに保存したいだけです。だから私はどのようにstd::vector<uchar>std::ostreamに入れるのだろうか?`std :: vector <uchar>`を `std :: ostream`に保存するには?

+0

おそらく要素を反復し、個別に各1をストリーミングすることによって。 –

答えて

11

使用writeは:

void send_data(std::ostream & o, const std::vector<uchar> & v) 
{ 
    o.write(reinterpret_cast<const char*>(v.data()), v.size()); 
} 

のostreamは裸charのを期待していますが、それはそのポインタをキャストしているようなucharsを治療するための罰金です。古いコンパイラでは、v.data()の代わりに&v[0]と言う必要があります。

エラーチェック機能をご希望の場合は、の結果をstd::ostream&またはboolとして返信することができます。

+0

+10非C++ 11コンパイラの可能性を考慮するため。もちろん、実際の答えは+1です。 –

+1

@ChristianRau:私はバイナリ+10 :-)だった –

1

あなたは、出力をフォーマットする方法に応じて、あなたはostream_iteratorと一緒にcopyを使用することができるかもしれない:

#include <iterator> 

/*...*/ 

copy(v.begin(), v.end(), ostream_iterator<uchar>(my_stream,"")); 
関連する問題