C++ 使用boost的具有多种数据类型的udp消息

C++ 使用boost的具有多种数据类型的udp消息,c++,boost-asio,C++,Boost Asio,我是boost新手,我想发送一个包含多个数据类型值的udp数据包。例如,我想发送一个包含三个字节的数据包,其中前两个字节用于消息代码,最后一个字节用于服务id。为此,我使用了memcpy,但结果缓冲区不包含正确和期望的值。这是我的密码 char buff[3]; uint16_t msgCode = 23; char serviceId = '9'; msgCode = htons(msgCode); memcpy(buff, &msgCode, 2); memcpy(buff+2,

我是boost新手,我想发送一个包含多个数据类型值的udp数据包。例如,我想发送一个包含三个字节的数据包,其中前两个字节用于消息代码,最后一个字节用于服务id。为此,我使用了memcpy,但结果缓冲区不包含正确和期望的值。这是我的密码

char buff[3];
uint16_t msgCode = 23;
char serviceId = '9';

msgCode = htons(msgCode);

memcpy(buff, &msgCode, 2);
memcpy(buff+2, &serviceId, 1);

std::string data = buff;
boost::shared_ptr<std::string> message(new std::string(data));

sock.async_send_to(boost::asio::buffer(data),dest_endPoint
, boost::bind(&udp_class::handle_send, this, message, boost::asio::placeholders::error
, boost::asio::placeholders::bytes_transferred));
charbuff[3];
uint16_t msgCode=23;
char serviceId='9';
msgCode=htons(msgCode);
memcpy(buff和msgCode,2);
memcpy(buff+2和serviceId,1);
std::string data=buff;
boost::shared_ptr消息(新的std::string(数据));
sock.async\u发送到(boost::asio::buffer(data),dest\u端点
,boost::bind(&udp\u class::handle\u send,this,message,boost::asio::占位符::错误
,boost::asio::占位符::字节(已传输));
注意:我只在缓冲区中遇到了问题,我指的是如何将多种类型的值插入缓冲区并作为udp数据包发送


thanx提前通知。

我在发布的代码中发现了一个问题。
data
变量是本地变量,它作为
async\u send\u to
方法调用的
buffers
参数传递。
boost::asio::buffer
类实例不复制
数据
内容。Asio发送数据时,
数据
变量已被销毁。解释了这种行为

尽管可以根据需要复制缓冲区对象,但 底层内存块由调用者保留,调用者必须 确保它们在调用处理程序之前保持有效

就我对代码的理解而言,要解决这个问题,必须将
消息
变量作为
boost::asio::buffer
构造函数参数