提问人:DWil 提问时间:1/22/2019 最后编辑:Jarod42DWil 更新时间:1/22/2019 访问量:721
如何在 C++ 中从 UDP 中解压缩无符号字符字节数组
How to unpack unsigned char byte array from UDP in C++
问:
我正在用 C++ 创建一个 UDP 发送方/接收方应用程序。我成功地通过 UDP 打包和发送数据包,并通过 UDP 成功接收相同的数据包,但是当我尝试将数据包解压缩到字节数组中时,问题出现了。我收到大小为 51 的字节数组,没有任何问题。然后,我将其转换为 a,并尝试根据数据包结构中的可变大小创建新的向量。std::vector<unsigned char>
数据包结构如下,长度为 51 字节:
uint16 data1;
double data2;
double data3;
double data4;
double data5;
double data6;
double data7;
uint8 data8;
我在一个名为 receiveArray 的函数中创建缓冲区,该函数返回一个:std::vector<unsigned char>
int BUFFSIZE = 51;
unsigned char buf[BUFFSIZE];
我收到数据包时没有错误。然后,我使用以下代码创建一个向量并返回该向量:buf
std::vector<unsigned char> output(buf, buf + BUFFSIZE);
return output;
我调用该函数并将其放入一个名为的向量中,该向量也显示正确的向量大小 51。receiveArray
buf
std::vector<unsigned char> buf = receiver.receiveArray();
然后,我尝试按索引拆分向量,并使用 memcpy 将向量转换为正确的值。
std::vector<unsigned char> data1Vector(buf.begin(), buf.begin()+1);
std::vector<unsigned char> data2Vector(buf.begin()+2, buf.begin()+9);
std::vector<unsigned char> data3Vector(buf.begin()+10, buf.begin()+17);
double data1, data2, data3;
memcpy(&data1, &data1Vector, sizeof(uint16_t));
memcpy(&data2, &data2Vector, sizeof(double));
memcpy(&data3, &data3Vector, sizeof(double));
显然这是行不通的,我不知道我做错了什么。我有一段非常相似的代码,用 python 编写,可以正确解码数据包,所以我认为这不是我的数据包结构或打包。这是我的实现。我也不使用任何序列化协议。
我对C++很陌生,可能犯了一些可怕的错误。感谢您的帮助,我非常感谢。
答: 暂无答案
评论
memcpy
int BUFFSIZE = 51;unsigned char buf[BUFFSIZE];
缺少,否则使用无效 C++ 的 VLA 扩展。const
std::vector
memcpy
memcpy
double