【问题标题】:boost asio buffer to data将 asio 缓冲区提升到数据
【发布时间】:2016-01-12 14:12:38
【问题描述】:

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() ???????

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    你可以这样打包:

    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

    【讨论】:

    • 我不断看到memcpy() 用于此类任务(关于其他几个与 SO 相关的问题)。我只是不明白为什么现代 C++(C++11 和下一个)没有提供更简洁的方法来做到这一点!
    • 请注意,buffer_cast 自 boost 1.66 以来已被弃用,data() 应在未来使用,如下所示:const char* b = mutable_buffer.data();
    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多