简体   繁体   中英

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

We have created and filled some std::vector<uchar> with openCV imencode for example. Now we want to stream it for example into some http_lib which can take some sort of ostream (ostringstream) for example, or we just want to save in while we debug our programm with ofstream. So I wonder how to put std::vector<uchar> into std::ostream ?

Use write :

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

The ostream expects naked char s, but it's fine to treat uchars as those by casting that pointer. On older compilers you may have to say &v[0] instead of v.data() .

You can return the result of write() as another std::ostream& or as a bool if you like some error checking facilities.

Depending on how you want the output formatted, you might be able to use copy in conjunction with ostream_iterator :

#include <iterator>

/*...*/

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM