如何将"std::vector"<uchar>保存到"std::ostream"中?

How to save `std::vector<uchar>` into `std::ostream`?

本文关键字:std 保存 ostream gt lt vector uchar      更新时间:2023-10-16

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

使用write:

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

ostream期望裸char,但是通过强制转换该指针来处理uchar是可以的。在旧的编译器上,你可能不得不说&v[0]而不是v.data()

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

根据您想要的输出格式,您可以将copyostream_iterator结合使用:

#include <iterator>
/*...*/
copy( v.begin(), v.end(), ostream_iterator<uchar>(my_stream,"") );