2011-11-15 2 views
5

Nous avons créé et rempli certains std::vector<uchar> avec openCV imencode par exemple. Maintenant, nous voulons le streamer par exemple dans un http_lib qui peut prendre une sorte de ostream (ostringstream) par exemple, ou nous voulons juste sauvegarder pendant que nous débugons notre programme avec ofstream. Donc, je me demande comment mettre std::vector<uchar> dans std::ostream?Comment enregistrer `std :: vector <uchar>` dans `std :: ostream`?

+0

probablement par les éléments itérer et le streaming chacun dans individuellement. –

Répondre

11

Utilisation write:

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

Le ostream attend char nu s, mais il est bien de traiter uchars comme ceux en lançant ce pointeur. Sur les compilateurs plus anciens, vous devrez peut-être dire &v[0] au lieu de v.data().

Vous pouvez renvoyer le résultat de write() comme autre std::ostream& ou bool si vous souhaitez bénéficier d'un service de vérification des erreurs.

+0

+10 Pour prendre en compte les chances probables d'un compilateur non-C++ 11. Et +1 pour la réponse réelle, bien sûr. –

+1

@ChristianRau: Je suppose que c'était un binaire +10 :-) –

1

Selon la façon dont vous voulez que la sortie formatée, vous pourriez être en mesure d'utiliser copy conjointement avec ostream_iterator:

#include <iterator> 

/*...*/ 

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