将asio缓冲区提升为数据

时间:2016-01-12 14:12:38

标签: c++ boost boost-asio

Here我找到了一种将数据转换为增强缓冲区的方法:

#include <memory>
#include <boost/asio.hpp>

int main()
{
    struct { float a, b; } data1;

    auto mutable_buffer = boost::asio::buffer(data);
}

如何做其他方式?我的意思是将recv_buf.data()转换为data1

  socket.receive_from(boost::asio::buffer(recv_buf),
      remote_endpoint, 0, error);
  data1=recv_buf.data() ???????

1 个答案:

答案 0 :(得分:2)

你可以像这样打包:

struct object{ float a, b; } data1[1];
auto mutable_buffer = boost::asio::buffer(data1);

并使用memcpy解压缩,但仅适用于POD类型。

const char* b = boost::asio::buffer_cast<const char*>(mutable_buffer);
object o;
memcpy(&o, b, boost::asio::buffer_size(mutable_buffer));

Live on Coliru