C语言中如何将2个结构体拼成一个包
答案:4 悬赏:80 手机版
解决时间 2021-11-13 20:39
- 提问者网友:锁深秋
- 2021-11-12 22:56
C语言中如何将2个结构体拼成一个包
最佳答案
- 五星知识达人网友:雾月
- 2021-11-13 00:32
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) );
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) );
全部回答
- 1楼网友:行雁书
- 2021-11-13 03:52
你这个char buff应该是1024 + 1 + 1 + 2 个空间大小。
你这两个结构体中需要特殊处理的是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的大小不一样。
你这两个结构体中需要特殊处理的是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的大小不一样。
- 2楼网友:duile
- 2021-11-13 02:26
#pragma pack(push,1)
head h;
b lb;
//h初始化
//lb初始化
send(&h,sizeof(h)+sizeof(lb),...)
#pragma pack(pop)
head h;
b lb;
//h初始化
//lb初始化
send(&h,sizeof(h)+sizeof(lb),...)
#pragma pack(pop)
- 3楼网友:舍身薄凉客
- 2021-11-13 01:47
memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 可以拿它拷贝任何数据类型的对象。 例:char a[10],b[5]; memcpy(b, a, sizeof(b)); /*注意如果用sizeof(a),会造成b的内存地址溢出
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯