我正在尝试制作可在esp32中使用的可移植库。现在,我有将结构转换为char *的函数。 我填充结构消息,然后执行:
memcpy(array,&message,sizeof(Message));
稍后,我想将此char *发送到套接字,在另一端接收它并重构该结构。那可能吗 ?另外,我还有一个问题:
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)];
两者之间有什么区别? array是一个指针,array2是一个数组,但是我不能在该函数中使用array2,因为一旦超出函数范围,指向它的指针就会被删除。
答案 0 :(得分:0)
我想将此char *发送到套接字,在另一端接收它并重建结构。有可能吗?
是的。有可能的。 Standard C ++没有套接字,但是没有任何其他网络通信API,因此您必须参考目标系统提供的API来实现。
还请注意,该消息包含一个指针,该指针将对无法访问其指向的内存的另一个系统上的进程无用。此外,不同的系统以不同的方式表示数据。因此,仅将消息存储到网络流将不起作用。如何进行数据序列化超出了我的回答范围。
这两者之间有什么区别?
一个是具有自动或静态存储的数组,另一个是指向免费存储中数组的第一个元素的指针(具有自动或静态存储)。