2011-11-15 24 views
5

Hemos creado y llenado algunos std::vector<uchar> con openCV imencode por ejemplo. Ahora queremos transmitirlo, por ejemplo, a http_lib que puede tomar algún tipo de ostream (ostringstream) por ejemplo, o solo queremos guardarlo mientras depuramos nuestro programa con ofstream. Entonces me pregunto cómo poner std::vector<uchar> en std::ostream?Cómo guardar `std :: vector <uchar>` en `std :: ostream`?

+0

Probablemente por iteración los elementos de transmisión y cada uno en forma individual. –

Respuesta

11

Uso write:

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

El ostream espera desnudos char s, pero está bien para tratar uchars como las de fundición ese puntero. En los compiladores más antiguos puede que tenga que decir &v[0] en lugar de v.data().

Puede devolver el resultado de write() como otro std::ostream& o como bool si desea algunas funciones de comprobación de errores.

+0

+10 Por tomar la probabilidad probable de que un compilador que no sea C++ 11 tenga en cuenta. Y +1 para la respuesta real, por supuesto. –

+1

@ChristianRau: Supongo que fue un +10 binario :-) –

1

Dependiendo de cómo desea que la salida formateada, es posible que pueda utilizar en conjunción con copyostream_iterator:

#include <iterator> 

/*...*/ 

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