C语言中如何将2个结构体拼成一个包

来源:百度知道 编辑:UC知道 时间:2024/09/24 14:06:33
在做聊天程序的时候用send(socket,buff,sizeof(buff),0)发送数据时,我需要发送2个结构体,也就是把两个结构体拼成buff,请问各位高手,我该怎么拼。比如这里有2个结构体:
struct msg_pack
{
char cmd;
char status;
short int len;
} head;

struct message
{
char a[1024];
} b;

我要把这个2个结构体拼在字符串buff中,如何实现啊?

memcpy就可以了

struct message msg;
struct msg_pack head;

char buffer[max_size];//max_size needs to be constant

memcpy(buffer, &head, sizeof(struct msg_pack) );
memcpy(buffer+sizeof(struct msg_pack), &msg, sizeof(struct message) );

memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 可以拿它拷贝任何数据类型的对象。 例:char a[10],b[5]; memcpy(b, a, sizeof(b)); /*注意如果用sizeof(a),会造成b的内存地址溢出

#pragma pack(push,1)
head h;
b lb;
//h初始化
//lb初始化
send(&h,sizeof(h)+sizeof(lb),...)
#pragma pack(pop)

你这个char buff应该是1024 + 1 + 1 + 2 个空间大小。
你这两个结构体中需要特殊处理的是short int len,因为它占两个字节(大部分是这样,不知道你的机器占多少个字节)把那个short int len进行位操作,变成两个字符(的ASC码)。
你也可以把short int len直接用itoa()变成一个字符串,但这样的话这个字符串的长度是不确定的。
然后你再用strcpy,把结构体中字符copy过去,或者直接把字符给你所定义的buf.
// 动态申请内存
...
*buf = msg_pack1.cmd;
*