【问题标题】:How to save `std::vector<uchar>` into `std::ostream`?如何将`std::vector<uchar>`保存到`std::ostream`中?
【发布时间】:2011-11-15 21:02:21
【问题描述】:

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

【问题讨论】:

  • 可能通过迭代元素并单独流式传输每个元素。

标签: c++ stl vector ostream


【解决方案1】:

使用write:

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

ostream 期望裸chars,但可以通过投射该指针来将 uchars 视为那些。在较旧的编译器上,您可能不得不说 &amp;v[0] 而不是 v.data()

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

【讨论】:

  • +10 考虑到非 C++11 编译器的可能性。当然,实际答案 +1。
  • @ChristianRau:我认为这是一个二进制 +10 :-)
【解决方案2】:

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

#include <iterator>

/*...*/

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

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 2018-05-18
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2020-01-26
    相关资源
    最近更新 更多