2011-11-15 25 views
5

उदाहरण के लिए हमने openCV imencode के साथ कुछ std::vector<uchar> बनाया और भर दिया है। अब हम इसे उदाहरण के लिए कुछ http_lib में स्ट्रीम करना चाहते हैं, उदाहरण के लिए ostream (ostringstream) का कुछ प्रकार ले सकते हैं, या हम अपने प्रोग्रामम को स्ट्रीम के साथ डीबग करते समय बस सहेजना चाहते हैं। तो मुझे आश्चर्य है कि std::vector<uchar> को std::ostream में कैसे रखा जाए?`std :: vector <uchar>` `std :: ostream` में कैसे सहेजें?

+0

शायद तत्वों पुनरावृत्ति और व्यक्तिगत रूप में हर एक स्ट्रीमिंग द्वारा। –

उत्तर

11

उपयोग write:

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

ostream उम्मीद नग्न char रों है, लेकिन यह है कि सूचक कास्टिंग द्वारा उन लोगों के रूप uchars के इलाज के लिए ठीक है। पुराने कंपाइलर्स पर आपको v.data() के बजाय &v[0] कहना पड़ सकता है।

आप अगर आप कुछ त्रुटि जाँच सुविधाओं की तरह एक और std::ostream& रूप में या एक bool रूप write() का परिणाम लौट सकते हैं।

+0

+10 खाते में गैर-सी ++ 11 कंपाइलर की संभावित संभावना लेने के लिए। और निश्चित रूप से वास्तविक उत्तर के लिए +1। –

+1

@ क्रिस्टियन राउ: मैं इसे एक बाइनरी +10 :-) लेता हूं –

1

कैसे आप उत्पादन स्वरूपित चाहते आधार पर, आप ostream_iterator साथ संयोजन के रूप में copy उपयोग करने में सक्षम हो सकता है:

#include <iterator> 

/*...*/ 

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