2011-11-15 23 views
5

Örneğin 'u openCV imencode ile oluşturduk ve doldurduk. Şimdi, örneğin, örneğin bir çeşit ostream (ostringstream) gibi bazı http_lib dosyalarına akıtmak isteriz, ya da programımızın akış yönü ile hata ayıklama yaparken sadece kaydetmek isteriz. std::vector<uchar>'un std::ostream'a nasıl konacağını merak ediyorum?std :: vector <uchar> `std :: ostream` içine nasıl kaydedilir?

+0

Muhtemelen elemanları yineleme ve ayrı ayrı her birini akışı ile. –

cevap

11

Kullanım write:

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

ostream çıplak char s beklediğini, ancak bu işaretçi döküm ile olanlar gibi uchars tedavi etmek iyi olur. Eski derleyicilerde v.data() yerine &v[0] demeniz gerekebilir.

Bazı hata denetleme olanaklarını isterseniz write() sonucunu std::ostream& veya olarak döndürebilirsiniz.

+0

+10 C++ olmayan bir derleyicinin olasılığını dikkate almak için. Ve gerçek cevap için +1, elbette. –

+1

@ChristianRau: Bunu bir ikili +10 :-) aldım –

1

çıkış biçimlendirilmiş istiyorum nasıl bağlı olarak, ostream_iterator birlikte copy kullanmak mümkün olabilir:

#include <iterator> 

/*...*/ 

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