Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c语言将字节数组转换为结构_C_Arrays_Serialization_Struct_Deserialization - Fatal编程技术网

用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

我正在用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 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。->序列化并不像你想象的那么简单。