【问题标题】:Boost Array data issueBoost Array 数据问题
【发布时间】:2014-01-04 15:07:06
【问题描述】:

嘿!

我现在尝试使用 boost asio 发送数据包,并将数据包数据存储在 boost 数组中。 在我通过动态分配的字符数组发送它之前。

我通过boost::array<char, 5824>声明数组

在它之后,我在我的数组中设置了正常值。

我通过 boost asio(同步)发送它。 但问题是当客户端接收数据包时,大约 1000 个第一个字节是可以的,但其他包含随机数据。

我在那里做错了什么? 我尝试了不同的组合,但结果是一样的。 谢谢!

编辑

我在通过方法array.data()获得的数组指针上通过memcpy填充数据;
例如memcpy(array.data()+10, &chararray, 15);
数据由boost::asio::write(socket_, boost::asio::buffer(array));发送

【问题讨论】:

  • 你是如何发送数据的?
  • 请向我们展示您用于填充和发送数组的代码。如果可能,请提供SSCCE
  • 我添加了用数据填充它的示例,并发送函数。
  • @Mgetz 谢谢你的帮助!当我将其更改为 std::array 时,它开始工作;)。但它似乎仍然有随机字节。
  • @user3126089 我已对答案发表评论

标签: c++ arrays boost c++11


【解决方案1】:

为什么不使用std::array? Boost 推荐它作为替代品,因为它已被添加到标准库中。然后您可以使用fill 成员对其进行初始化,或使用{} 初始化器将其归零。

using socketData = std::array<char, 5824>;
socketData data{}; // uninitialized per standard, the {} zeros

socketData::iterator iter = data.begin();

// write data using iterators
boost::asio::write(socket_, boost::asio::buffer(array));

【讨论】:

  • 你不需要用零填充。你可以说socketData data{};。但是您的代码与 OP 的代码不同。他们正在从不同的数组复制。
  • @juanchopanza 我已经更新了我的示例以获取您的归零建议。我没有看到他们的副本,但无论如何使用std::copy 很容易实现。
  • 它们memcpy 从一个数组到另一个数组的 15 个字节,从目标数组的第 10 个位置开始。是的,您可以使用 std::copy 来做到这一点,这样会更容易阅读 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2021-01-05
  • 2011-08-04
  • 2017-03-07
  • 2011-03-29
相关资源
最近更新 更多