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::string摆脱 a stringstream,你可以这样做:

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

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

于 2012-09-07T15:25:52.870 回答