【问题标题】:Transferring A std::stringstream传输一个 std::stringstream
【发布时间】:2014-04-10 19:11:50
【问题描述】:

大家好,非常感谢您的宝贵时间。

有一个 std::stringstream 需要传输到远程机器。 网络库允许我用以下方法构造一个数据包:

CreatePacket( const void * DATA, size_t DATA_SIZE )

在接收端,数据以 uint8_t* 形式返回

我想不通的是如何获取 std::stringstream 数据,将其放入 CreatePacket() 函数,然后在接收端从 uint8_t* 重建 std::stringstream 并以最有效的方式进行方式。

作为旁注,字符串流包含二进制数据。

再次感谢大家的宝贵时间,非常感谢。

【问题讨论】:

  • 你有没有看过你最喜欢的 C++ 参考来找到std::stringstream 的所有方法?看起来有一个方法str() 可能有点用处。
  • 是的,我正在将字符串流转换为 std::string 然后使用字符串 c_str 函数进行传输,但我不确定是否有更有效的方法。从 uint8_t* 重建接收端的字符串流是我最困惑的地方。

标签: c++ c++11 network-programming type-conversion stringstream


【解决方案1】:

使用str() 成员函数从stringstream 获取std::string。然后使用c_str()data() 成员函数来访问字符串的内部缓冲区。

auto s = myStringStream.str();
CreatePacket(s.data(), s.size());

【讨论】:

  • 非常感谢,在接收端从uint8_t*重构stringstream怎么样?
  • 嗯,istringstream 呢?
  • 我在发送端使用 std::ostringstream,在接收端使用 std::istringstream,但不确定如何将 uint8_t* 实际放入 istringstream。非常感谢您的耐心等待。
  • @KKlouzal 最简单的方法是使用带有指向缓冲区和长度的指针的构造函数来构造string。然后,您可以使用这个string 构造一个istringstream。如果您想花哨并避免数据复制,则必须实现一个派生自basic_streambuf 的类。然后将这个类的一个实例传递给istringstream
  • 好的,再次感谢你,我不需要太花哨:) 打字是唯一的方法吗? std::string((const char*)event.packet->data, event.packet->dataLength);
猜你喜欢
  • 2017-11-15
  • 2018-12-03
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多