我有一個vector<char>
的數據,我想寫入std::stringstream
。如何使用stringstream編寫?
我想:
my_ss.write(vector.data(), vector.size());
...但它似乎置入任何my_ss
我聲明如下:
std::stringstream my_ss( std::stringstream::binary);
爲什麼寫不工作(應用程序不會崩潰並編譯0錯誤,0警告)?
我有一個vector<char>
的數據,我想寫入std::stringstream
。如何使用stringstream編寫?
我想:
my_ss.write(vector.data(), vector.size());
...但它似乎置入任何my_ss
我聲明如下:
std::stringstream my_ss( std::stringstream::binary);
爲什麼寫不工作(應用程序不會崩潰並編譯0錯誤,0警告)?
對於「我該怎麼辦呢」,你可以使用一個std::ostream_iterator
:
std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));
完整的示例:
#include <iterator>
#include <sstream>
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<char> vector(60, 'a');
std::ostringstream my_ss;
std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));
std::cout << my_ss.str() << std::endl;
}
你也可以只用它來直接構建string
,足不出戶通過stringstream
在所有:
std::string str(vector.begin(), vector.end()); // skip all of the copy and stringstream
這個答案可能給出一個錯誤的想法,就好像'stringstream :: write()不能使用。事實上,OP的問題似乎不是用'stringstream :: write()',而是用'std :: stringstream my_ss(std :: stringstream :: binary);',它可以固定到'std :: stringstream my_ss (std :: stringstream :: out | std :: stringstream :: binary);'作爲其他答案的建議。 –
雖然你哈ven't給出任何代碼,它聽起來就像你可能只是寫道:
std::stringstream my_ss (std::stringstream::binary);
如果您想寫信給你需要的標誌std::stringstream::out
在構造函數中結合了字符串流。如果我是正確的,那麼你會看到的東西做工精細,如果你把它改爲:
std::stringstream my_ss (std::stringstream::out | std::stringstream::binary);
(顯然,如果你想從字符串流,你需要添加std::stringstream::in
閱讀)
UPDATE現在你已經給你的代碼......這是你的具體問題。注意@ awoodland的觀點是,你只需要從一個chars向量構造一個字符串(如果這是你計劃用這個流做的唯一的事情)。
stringstream中字符串模式的默認參數在外面。
explicit basic_stringstream(ios_base::openmode _Mode =
ios_base::in | ios_base::out)
: _Mybase(&_Stringbuffer),
_Stringbuffer(_Mode)
{ // construct empty character buffer
}
您需要添加字符串流::您是否通過明確的東西像字符串流:二進制
或者只是使用std :: ostringstream
我們看一些實際代碼。 (而'std :: basic_ios :: binary'對'stringstream'沒有任何影響,它們總是「二進制的」。) –