Как распаковать массив байтов без знака из UDP в C ++ - PullRequest
0 голосов
/ 21 января 2019

Я создаю приложение отправителя / получателя UDP на C ++.Я успешно упаковываю и отправляю пакет по 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 ++ и, возможно, допустил несколько ужасных ошибок. Спасибо за вашу помощь, я очень благодарен.

...