C语言中如何将2个结构体拼成一个包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何将2个结构体拼成一个包相关的知识,希望对你有一定的参考价值。
在做聊天程序的时候用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中,如何实现啊?
你这两个结构体中需要特殊处理的是short int len,因为它占两个字节(大部分是这样,不知道你的机器占多少个字节)把那个short int len进行位操作,变成两个字符(的ASC码)。
你也可以把short int len直接用itoa()变成一个字符串,但这样的话这个字符串的长度是不确定的。
然后你再用strcpy,把结构体中字符copy过去,或者直接把字符给你所定义的buf.
// 动态申请内存
...
*buf = msg_pack1.cmd;
*(buf + 1)= msg_pack1.status;
*(buf + 2)= (你通过len转换过来的第一个字符)
*(buf + 3)= (你通过len转换过来的第二个字符)
// 复制message 中的1024个字符
strcpy(buf + 4, message1.a)
这样的话就行了,转换len的时候也可以用itoa,获得的字符串,进行转换。不同的是你申请buf的大小不一样。 参考技术B 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) );本回答被提问者采纳 参考技术C #pragma pack(push,1)
head h;
b lb;
//h初始化
//lb初始化
send(&h,sizeof(h)+sizeof(lb),...)
#pragma pack(pop)
以上是关于C语言中如何将2个结构体拼成一个包的主要内容,如果未能解决你的问题,请参考以下文章