2011-11-17 28 views
4

我有一个vector<char>的数据,我想写入std::stringstream如何使用stringstream编写?

我想:

my_ss.write(vector.data(), vector.size()); 

...但它似乎置入任何my_ss我声明如下:

std::stringstream my_ss( std::stringstream::binary);

为什么写不工作(应用程序不会崩溃并编译0错误,0警告)?

+2

我们看一些实际代码。 (而'std :: basic_ios :: binary'对'stringstream'没有任何影响,它们总是“二进制的”。) –

回答

8

对于“我该怎么办呢”,你可以使用一个std::ostream_iterator

std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss)); 

完整的示例:

#include <iterator> 
#include <sstream> 
#include <vector> 
#include <iostream> 
#include <algorithm> 

int main() { 
    std::vector<char> vector(60, 'a'); 
    std::ostringstream my_ss; 
    std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss)); 
    std::cout << my_ss.str() << std::endl; 
} 

你也可以只用它来直接构建string,足不出户通过stringstream在所有:

std::string str(vector.begin(), vector.end()); // skip all of the copy and stringstream 
+0

这个答案可能给出一个错误的想法,就好像'stringstream :: write()不能使用。事实上,OP的问题似乎不是用'stringstream :: write()',而是用'std :: stringstream my_ss(std :: stringstream :: binary);',它可以固定到'std :: stringstream my_ss (std :: stringstream :: out | std :: stringstream :: binary);'作为其他答案的建议。 –

4

虽然你哈ven't给出任何代码,它听起来就像你可能只是写道:

std::stringstream my_ss (std::stringstream::binary); 

如果您想写信给你需要的标志std::stringstream::out在构造函数中结合了字符串流。如果我是正确的,那么你会看到的东西做工精细,如果你把它改为:

std::stringstream my_ss (std::stringstream::out | std::stringstream::binary); 

(显然,如果你想从字符串流,你需要添加std::stringstream::in阅读)

UPDATE现在你已经给你的代码......这是你的具体问题。注意@ awoodland的观点是,你只需要从一个chars向量构造一个字符串(如果这是你计划用这个流做的唯一的事情)。

3

stringstream中字符串模式的默认参数在外面。

explicit basic_stringstream(ios_base::openmode _Mode = 
    ios_base::in | ios_base::out) 
    : _Mybase(&_Stringbuffer), 
     _Stringbuffer(_Mode) 
    { // construct empty character buffer 
    } 

您需要添加字符串流::您是否通过明确的东西像字符串流:二进制

或者只是使用std :: ostringstream