如何将char的向量转换为stringstream

时间:2015-02-10 11:57:33

标签: c++ vector stringstream

是否可以将char矢量转换为std::stringstream?例如:

std::vector<unsigned char> data;
std::stringstream st(????);

我有什么办法可以将data的值分配给st吗?

3 个答案:

答案 0 :(得分:11)

如果我们查看std::stringstream构造函数,我们会看到第二个构造函数是:

explicit basic_stringstream( const std::basic_string<CharT,Traits,Allocator>& str,
                ios_base::openmode mode = ios_base::in|ios_base::out );

basic_string的构造函数包括:

template< class InputIt >
basic_string( InputIt first, InputIt last, 
              const Allocator& alloc = Allocator() );

因此,我们可以这样做:

std::vector<unsigned char> data(20);

std::stringstream st(std::string(data.begin(), data.end()));

答案 1 :(得分:1)

提供vec向量和strstr(o)stringstream:

copy(vec.begin(), vec.end(), ostream_iterator<char>(strstr));

答案 2 :(得分:1)

如果您尝试这样做:

std::stringstream st(data.data());

您将从gcc中收到此错误:

  

错误:来自&#39; unsigned char *&#39;的用户定义转换无效to&#39; const __string_type&amp; {aka const std :: basic_string&amp;}&#39; [-fpermissive]

请注意,gcc正在尝试将参数转换为std::string

Barry建议在答案中明确构建std::string

如果std::vector<unsigned char> data为空终止,则可以利用隐式构造。您只需要更改为可以构建std::string的内容。

std::stringstream st(reinterpret_cast<char*>(data.data()));

更简单的解决方案是将std::vector<unsigned char> data的类型更改为std::vector<char> data。在这种情况下,不需要演员阵容:

std::stringstream st(data.data());