如何在C ++中从UDP解压缩无符号字符字节数组

时间:2019-01-21 17:06:14

标签: c++ arrays vector udp byte

我正在用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 ++的新手,可能犯了一些可怕的错误。感谢您的帮助,我非常感谢。

0 个答案:

没有答案