如何将char向量转换为stringstream

How to convert vector of char to stringstream

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

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

有什么方法可以将 data 的值赋给 st 吗?

如果我们查看 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()));

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

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

如果您尝试这样做:

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

你将从 gcc 得到这个错误:

error: invalid user-defined conversion from 'unsigned char*' to 'const __string_type& {aka const std::basic_string&}' [-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());