我有一个vector<char>
的数据,我想写入std::stringstream
。如何使用stringstream编写?
我想:
my_ss.write(vector.data(), vector.size());
...但它似乎置入任何my_ss
我声明如下:
std::stringstream my_ss( std::stringstream::binary);
为什么写不工作(应用程序不会崩溃并编译0错误,0警告)?
我有一个vector<char>
的数据,我想写入std::stringstream
。如何使用stringstream编写?
我想:
my_ss.write(vector.data(), vector.size());
...但它似乎置入任何my_ss
我声明如下:
std::stringstream my_ss( std::stringstream::binary);
为什么写不工作(应用程序不会崩溃并编译0错误,0警告)?
对于“我该怎么办呢”,你可以使用一个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
这个答案可能给出一个错误的想法,就好像'stringstream :: write()不能使用。事实上,OP的问题似乎不是用'stringstream :: write()',而是用'std :: stringstream my_ss(std :: stringstream :: binary);',它可以固定到'std :: stringstream my_ss (std :: stringstream :: out | std :: stringstream :: binary);'作为其他答案的建议。 –
虽然你哈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向量构造一个字符串(如果这是你计划用这个流做的唯一的事情)。
stringstream中字符串模式的默认参数在外面。
explicit basic_stringstream(ios_base::openmode _Mode =
ios_base::in | ios_base::out)
: _Mybase(&_Stringbuffer),
_Stringbuffer(_Mode)
{ // construct empty character buffer
}
您需要添加字符串流::您是否通过明确的东西像字符串流:二进制
或者只是使用std :: ostringstream
我们看一些实际代码。 (而'std :: basic_ios :: binary'对'stringstream'没有任何影响,它们总是“二进制的”。) –