Неправильные данные при выполнении memcpy и печатиC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Неправильные данные при выполнении memcpy и печати

Сообщение Гость »


Я пишу код, который получает некоторые данные из другого приложения через сокет UDP, преобразует их в структуру, а затем создаю pduMessage и считываю их в том же коде, чтобы протестировать.
Структура, в которую я конвертирую полученные данные:

Код: Выделить всё

struct Instruction
{
int type;
std::array instruction;
std::array verbal_transition_alert_instruction;
std::array verbal_succinct_transition_instruction;
std::array verbal_pre_transition_instruction;
std::array verbal_post_transition_instruction;
// std::vector street_names;
// std::vector begin_street_names;
double time;
double length;
double cost;
int begin_shape_index;
int end_shape_index;
std::array travel_mode;
std::array travel_type;
};

struct ReceivedData
{
int path_size;
int instruction_size;
std::vector path;
double distance;
std::vector instructions;
double time;
};
PDU_Message structure:

Код: Выделить всё

struct BasePacket
{
uint32_t crc32;
uint16_t count;
uint16_t version;
uint64_t timestamp;
char payload[56000];
};

struct PDUMessage
{
unsigned int messageID;
unsigned int messageLength;
BasePacket basePacket;
};
Now I am creating the

Код: Выделить всё

PDU_Messages
in the below code:

Код: Выделить всё

PDUMessage create_PDUMessage(unsigned int messageID, unsigned int messageLength, ReceivedData parsedData)
{
PDUMessage pduMessage;
pduMessage.messageID = messageID;
pduMessage.messageLength = messageLength;

// Copy path size and instruction size into payload
memcpy(pduMessage.basePacket.payload, &parsedData.path_size, sizeof(int));
memcpy(pduMessage.basePacket.payload + sizeof(int), &parsedData.instruction_size, sizeof(int));

// Copy path coordinates into payload
size_t offset = 2 * sizeof(int);
for (const auto &coord : parsedData.path)
{
memcpy(pduMessage.basePacket.payload + offset, &coord.first, sizeof(double));
memcpy(pduMessage.basePacket.payload + offset + sizeof(double), &coord.second, sizeof(double));
offset += 2 * sizeof(double);
}

// Copy distance into payload
memcpy(pduMessage.basePacket.payload + offset, &parsedData.distance, sizeof(double));
offset += sizeof(double);

// Copy instructions into payload
for (const auto &instr : parsedData.instructions)
{

memcpy(pduMessage.basePacket.payload + offset, instr.instruction.data(), instr.instruction.size());
offset += instr.instruction.size();
memcpy(pduMessage.basePacket.payload + offset, instr.verbal_transition_alert_instruction.data(), instr.verbal_transition_alert_instruction.size());
offset += instr.verbal_transition_alert_instruction.size();
memcpy(pduMessage.basePacket.payload + offset, instr.verbal_succinct_transition_instruction.data(), instr.verbal_succinct_transition_instruction.size());
offset += instr.verbal_succinct_transition_instruction.size();
memcpy(pduMessage.basePacket.payload + offset, instr.verbal_pre_transition_instruction.data(), instr.verbal_pre_transition_instruction.size());
offset += instr.verbal_pre_transition_instruction.size();
memcpy(pduMessage.basePacket.payload + offset, instr.verbal_post_transition_instruction.data(), instr.verbal_post_transition_instruction.size());
offset += instr.verbal_post_transition_instruction.size();

}

// Set other fields of base packet

for (const auto &path : parsedData.path){
// std::cout

Источник: [url]https://stackoverflow.com/questions/78128014/incorrect-data-while-doing-memcpy-and-printing[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»