如何将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());
是否可以将 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());