是否可以将char矢量转换为std::stringstream
?例如:
std::vector<unsigned char> data;
std::stringstream st(????);
我有什么办法可以将data
的值分配给st
吗?
答案 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());