Разница между массивом символов [SizeOf (Message)]; против символа * массив = новый символ [SizeOf (Message)];

голоса
0

Я пытаюсь сделать портативную библиотеку, которая может быть использована в esp32. Сейчас у меня есть функция, которая преобразует-структуру в полукокс *. Я заселить STRUCT сообщение, а затем сделать:

memcpy(array,&message,sizeof(Message));

Позже я хотел бы отправить этот символ * в сокет, получить его в другой стороне и восстановить структуры. Это возможно ? Кроме того, еще один вопрос у меня есть:

struct Header{
    uint32_t source_id;
    uint32_t destinatary_id;
    uint32_t message_type;
};

struct Data {
    uint32_t dataSize;
    uint8_t* data;
};

struct Message{
    Header header;
    Data data;
    uint32_t timestamp;
};

char* array = new char[sizeof(Message)];
char array2[sizeof(Message)];

В чем разница между этими двумя? массива является указателем и array2 массив, но я не могу использовать array2 в этой функции, потому что когда я выхожу за рамки функции указатель на него удаляется.

Задан 09/10/2019 в 12:59
источник пользователем
На других языках...                            


1 ответов

голоса
0

Я хотел бы отправить этот символ * в сокет, получить его в другой стороне и восстановить структуры. Это возможно ?

Да. Это возможно. Стандарт C ++ не имеет сокет, или любую другую сеть связь API, однако, так что вы должны проконсультироваться с API для предлагаемого целевой системы, чтобы сделать это.

Также обратите внимание на то, что сообщение содержит указатель, который будет бесполезен для процесса на другой системе, которая не имеет доступа к памяти, она указывает. Кроме того, различные системы представляют собой данные по-разному. Таким образом, просто memcpying сообщение для сетевого потока не будет работать. Как сделать сериализацию данных выходит за рамки моего ответа.

В чем разница между этими двумя?

Одним из них является массив с автоматическим или статическим хранения, а другой является указателем (с автоматическим или статическим хранения), что указывает на первый элемент массива в свободном магазине.

Ответил 09/10/2019 в 14:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more