C ++ std :: stringstream>> std :: string只存储第一个条目?

时间:2012-09-07 15:21:36

标签: c++ stringstream

  

可能重复:
  How to force std::stringstream operator >> to read an entire string?

我正在尝试将结构转换为字符串,类似于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"而没有其他内容。

我有什么明显的遗失吗?

3 个答案:

答案 0 :(得分:8)

您应该使用stringstream ::str成员获取值,而不是回读字符串:

string p = ss.str();

否则,读数遵循将空格视为分隔符的通常模式。

答案 1 :(得分:3)

如果您希望从std::string中获取stringstream,请执行以下操作:

packet = ss.str();

答案 2 :(得分:0)

StringStream运算符&gt;&gt;像任何其他流运算符&gt;&gt;一样工作。 因此,对于参数字符串(&gt;&gt; to string),它会将数据提供给第一个白色字符(空格,换行,文件结尾等)