2011-11-15 26 views
5

Ví dụ: chúng tôi đã tạo và điền một số std::vector<uchar> với openCV imencode. Bây giờ chúng tôi muốn dòng nó ví dụ vào một số http_lib mà có thể mất một số loại ostream (ostringstream) ví dụ, hoặc chúng tôi chỉ muốn lưu trong khi chúng tôi gỡ lỗi chương trình của chúng tôi với ofstream. Vì vậy, tôi tự hỏi làm thế nào để đặt std::vector<uchar> vào std::ostream?Cách lưu `std :: vector <uchar>` vào `std :: ostream`?

+0

Có lẽ bằng cách lặp lại các yếu tố và streaming mỗi người trong riêng. –

Trả lời

11

Sử dụng write:

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

Các ostream hy vọng trần truồng char s, nhưng nó là tốt để điều trị uchars như những người bằng cách đúc con trỏ đó. Trên các trình biên dịch cũ hơn, bạn có thể phải nói &v[0] thay vì v.data().

Bạn có thể trả lại kết quả của write() làm std::ostream& hoặc bool nếu bạn thích một số cơ sở kiểm tra lỗi.

+0

+10 Để xem xét cơ hội có thể xảy ra của trình biên dịch không phải C++ 11. Và 1 cho câu trả lời thực tế, tất nhiên. –

+1

@ChristianRau: Tôi lấy nó là số nhị phân +10 :-) –

1

Tùy thuộc vào cách bạn muốn đầu ra định dạng, bạn có thể sử dụng copy kết hợp với ostream_iterator:

#include <iterator> 

/*...*/ 

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