c 语言char求组合结构体转换,【C 练习】C语言中结构体与字符数组之间的相互转换...

本文介绍了结构体在C语言中的字节对齐原理,通过实例展示了#pragma pack指令对结构体内存布局的影响。强调了服务端和客户端在处理结构体数据时保持相同对齐设置的重要性,否则可能导致数据错乱。博客还提供了代码示例来演示字节对齐后的内存复制操作。
摘要由CSDN通过智能技术生成

#include 

#include 

#include 

#pragma  pack(push)  //保存对齐状态

#pragma  pack(1)

typedef struct strcChange

{

unsigned char A;

unsigned int B;

}STRU_CHANGE;

#pragma  pack(pop)

//如果在未加字节对齐的情况下,那么A变量的后面需要自动填充三个字节,

//那么直接将结构体取地址后复制到另一个数组中,实际上所需占用的内存大小是8个byte。

typedef struct strcChange2

{

unsigned char A;

unsigned char B;

unsigned char C;

}STRU_CHANGE2;

int main()

{

STRU_CHANGE strChangeData1;

STRU_CHANGE strChangeData2;

STRU_CHANGE * pstrChangeData1;

unsigned char * pucData;

char C[10];

strChangeData1.A = 0x01;

strChangeData1.B = 0x05040302;

strChangeData2.A = 0x11;

strChangeData2.B = 0x55443322;

pucData = (unsigned char *)(&strChangeData2);

printf("pucData[0] = 0x%x\n", pucData[0]);

printf("pucData[1] = 0x%x\n", pucData[1]);

printf("pucData[2] = 0x%x\n", pucData[2]);

printf("pucData[3] = 0x%x\n", pucData[3]);

printf("pucData[4] = 0x%x\n", pucData[4]);

memcpy(C, &strChangeData1, sizeof(strChangeData1));

pstrChangeData1 = (STRU_CHANGE *)((char*)C);

printf("STRU_CHANGE.A = 0x%x\n", pstrChangeData1->A);

printf("STRU_CHANGE.B = 0x%08x\n", pstrChangeData1->B);

system("PAUSE");

return 0;

}总结

服务端使用了 #pragma  pack(n)   , 客户端接收也必须同时对变量结构体进行 #pragma  pack(n)   处理, 不然对齐方式不同,直接赋值会错乱。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值