2015-02-10 106 views
3

是否可以將char向量轉換爲std::stringstream?例如:如何將char向量轉換爲stringstream

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

是否存在被我可以分配的data價值st什麼辦法?

+0

我試圖「的std :: stringstream的SS; 的std ::字符串str(CL_Data.begin(),CL_Data.end()); ss.str(STR );」它也在工作,但我正在尋找從vector到stringstream的直接轉換 – 2015-02-10 12:03:19

回答

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

提供vec載體和strstr(O)的stringstream:

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

如果您嘗試這樣做:

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()); 
+2

此代碼正在引發讀取溢出 - OP的「std :: vector 」的內容不保證以null結尾! – LThode 2015-02-10 15:44:29

+0

@LThode這是一個我沒有考慮過的優秀點。我已將條件添加到答案中。 – 2015-02-10 16:47:25