我正在用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语言中都这样做。

如果可能的话,请给我建议一些不错的文章来阅读有关此内容的文章,如果我不见了,请给我一个概念的名称。

最佳答案

我看到很多错误,

第一,
 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

第三名

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));

关于c - 将字节数组转换为c中的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22603824/

10-12 18:16