如何将`std :: vector <uchar>`保存到`std :: ostream`?</uchar>

时间:2011-11-15 21:02:22

标签: c++ stl vector ostream

我们已经创建了一些std::vector<uchar>并填充了openCV imencode。现在我们想要将它流式传输到一些http_lib中,例如可以采用某种ostream(ostringstream),或者我们只想在使用ofstream调试程序时保存。所以我想知道如何将std::vector<uchar>放入std::ostream

2 个答案:

答案 0 :(得分: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 s,但通过投射指针来处理uchars就好了。在较旧的编译器上,您可能需要说&v[0]而不是v.data()

如果您喜欢某些错误检查工具,则可以将write()的结果作为另一个std::ostream&bool返回。

答案 1 :(得分:1)

根据您希望格式化输出的方式,您可以将copyostream_iterator结合使用:

#include <iterator>

/*...*/

copy( v.begin(), v.end(), ostream_iterator<uchar>(my_stream,"") );