1

重複の可能性:
std :: stringstream演算子>>に文字列全体を読み取るように強制するにはどうすればよいですか?

toString()がJavaまたはC ++のオブジェクトに対してどのように機能するかと同様に、構造を文字列に変換しようとしています。これを行うには、フォーマットされたデータをstd :: stringstreamに書き込んでから、それをstd::stringに書き込みます。

これが私が持っているものです:

std::stringstream ss;
std::string       packet;

ss <<  "Packet Length: " << p->header->len
   << " (" << p->header->caplen << ")" << std::endl
   << "Collected: " <<  timedate << "."
   << std::dec << p->header->ts_usecs << std::endl
   << "Eth:\tFrom: " << to_address(p->from) << std::endl
   <<     "\tTo:   " << to_address(p->to)  << std::endl
   <<     "\tType: " << to_hex(p->type, false)
   << " (" << p->type_name << ")" << std::endl;

しかし、何らかの理由でこのストリームをstd :: stringパケットに書き込むと:

ss >> packet;

次に、パケットの値を出力します。

cout << "Packet X " << packet << endl;

私はテキストだけを見て、他には"Packet"何も見えません。

私がここで見逃している明らかな何かがありますか?

4

3 に答える 3

8

文字列を読み返す代わりに、stringstream ::strメンバーを使用して値を取得する必要があります。

string p = ss.str();

それ以外の場合、読み取りは、スペースをセパレーターとして扱う通常のパターンに従います。

于 2012-09-07T15:24:16.793 に答える
3

std::stringa からを取り出したい場合はstringstream、次のようにします。

packet = ss.str();
于 2012-09-07T15:24:14.410 に答える
0

StringStream 演算子 >> は、他のストリーム演算子 >> と同じように機能します。したがって、パラメータ文字列 (>> to string) の場合、最初の白い文字 (スペース、改行、ファイルの終わりなど) にデータが渡されます。

于 2012-09-07T15:25:52.870 に答える