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