char配列をstd::stringstreamに格納してから、1バイトずつget()でスキャンしていたのですが、
どうも1バイト増えているんです。
#include <vector> #include <sstream> #include <string> using namespace std; int main() { // not unsigned for std::string. const char binary[]={ 1,2,3,4,5,6,7,8, 9,0,1,2,3,4,5,6 }; string str(binary); vector<char> v; stringstream ss; for (unsigned i=0; i<sizeof(binary)/sizeof(char); ++i) { v.push_back(binary[i]); ss << binary[i]; } cout << sizeof(binary)/sizeof(char) << ", "; cout << str.size() << ", "; cout << v.size() << ", "; cout << ss.str().size() << ", "; vector<char> v2; while (!ss.eof()) { v2.push_back(ss.get()); } cout << v2.size() << endl; cout << (int)v2[v2.size()-1] << endl; return 0; }実行結果(Borland C++ 5.5.1):
16, 9, 16, 16, 17
-1
std::stringが '\0' に反応しているのはよいのですが、
std::stringstreamからデータをもらったstd::vector v2が1つ増えています。
どうも、一番最後にstringstream がeof()でないとしながら、-1を出力しているようです。
ストリームをbytestreamとして使いたいなら、ピーク値をチェックするしかないのでしょうか・・・
素直にvectorにデータを格納するほうが定石ですかね。