用c语言将字节数组转换为结构
我正在用C语言开发一个客户机-服务器应用程序 我希望以字符数组的形式从客户端发送结构,然后将字符数组转换回服务器端的结构 我有以下结构用c语言将字节数组转换为结构,c,arrays,serialization,struct,deserialization,C,Arrays,Serialization,Struct,Deserialization,我正在用C语言开发一个客户机-服务器应用程序 我希望以字符数组的形式从客户端发送结构,然后将字符数组转换回服务器端的结构 我有以下结构 typedef struct mail{ char cc[30]; char bcc[30]; char body[30]; } typedef struct msg_s{ int msgId; mail mail_l; } 我想将msg1发送到客户端 unsigned char d
typedef struct mail{
char cc[30];
char bcc[30];
char body[30];
}
typedef struct msg_s{
int msgId;
mail mail_l;
}
我想将msg1发送到客户端
unsigned char data[100];
struct msg_s msg1 ;
msg1.msgId=20;
// suppose the data in mail structure is already filled.
data = (unsigned char*)malloc(sizeof(msg1));
memcpy(data, &msg1, sizeof(msg1));
write(socketFd , data , sizeof(data));
当我在服务器端获取这些数据时,如何将其转换回结构
我想用C和java语言做同样的事情
如果可能的话,请给我推荐一些好文章来阅读,如果我不知道这个概念的名称。我看到很多错误
首先,,
结构邮件中的字符数组声明不符合C约定
应该是,
typedef struct mail{
char cc[30];
char bcc[30];
char body[30];
}
第二
更改
struct msg\u s=msg1代码>至struct msg\u s msg1;//它是结构msg1的声明
第三
无符号字符数据[100]代码>is在静态内存中分配100字节内存
通过data=(unsigned char*)malloc(sizeof(msg1)),再次分配size struct msg1的动态内存[heap]代码>
更改无符号字符数据[100]代码>到无符号字符*数据代码>
在客户端
struct msg_s *inMsg ;
inMsg = malloc(sizeof(struct msg_s)); // malloc in c doesn't require typecasting
memcpy(inMsg ,data, sizeof(struct msg_s));
struct msg_s=msg1代码>应该是struct msg\u s msg1
数据
是不可修改的r值,或者类似的东西。无符号字符数据[100]
应该是无符号字符*数据代码>或。。。我不知道,你不能像现在这样给它分配一个malloc
'd地址。用谷歌搜索不同的整数大小(甚至可能是不同的浮点约定)、结构成员顺序、结构打包/填充,当然还有endianess。->序列化并不像你想象的那么简单。