我正在用C ++创建一个UDP发送器/接收器应用程序。我已经成功通过UDP打包并发送了数据包,并通过UDP成功接收了相同的数据包,但是当我尝试将数据包解压缩为字节数组时出现了问题。我收到大小为51的字节数组,没有任何问题。然后,我将其转换为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;
我调用receiveArray
函数并将其放入一个名为buf
的向量中,该向量还显示正确的向量大小51。
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 ++的新手,可能犯了一些可怕的错误。感谢您的帮助,我非常感谢。