将字节数组转换为c中的结构

时间:2014-03-24 07:57:41

标签: 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 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语言做同样的事情。

如果可能的话,请向我推荐一些关于此的好文章,以及如果我遗失的概念名称。

1 个答案:

答案 0 :(得分:0)

我看到很多错误,

首先,  Character array declaration inside struct mail doesn't following the C convention

应该是,

typedef struct mail{  
    char cc[30];   
    char bcc[30];  
    char body[30];  
}

第二

struct msg_s = msg1 ;更改为struct msg_s msg1 ; // its a declaration of a struct msg1

第3次

unsigned char data[100];在静态内存中分配100字节内存。

并且您将data = (unsigned char*)malloc(sizeof(msg1));再次分配大小为struct msg1的动态内存[heap]。

unsigned char data[100];更改为unsigned char *data;

在客户端,

struct msg_s *inMsg ;  
inMsg = malloc(sizeof(struct msg_s));  // malloc in c doesn't require typecasting
memcpy(inMsg ,data, sizeof(struct msg_s));