使用变量转换C Struct

时间:2015-08-13 15:45:08

标签: c casting

我正在为一个项目编写一个通信协议,其中包含两个用于请求和响应的c结构。根据设备的设置方式,数据传输可以是请求(主模块)或响应(从模块)。

结构非常接近。最大的区别在于请求的结构与响应的结构。

我有一个变量,它保存指向定义为

的全局变量的指针
unsigned int MBData;

MBData = gCommResponse;

引用代码时,我要么

((MBResponse*)MBData)->Address = someData;

((MBResponse*))MBData)->Address = someData;

此代码成功,但希望通信功能更加模糊。

我想要做的是使用指向MBRequest或MBResponse的指针来转换MBData。

unsigned int MBStruct;

MBStruct = &MBResponse;

((MBStruct*)MBData)->Address = someData; // Something like this

这在C编程中是否可行?

感谢。

2 个答案:

答案 0 :(得分:0)

这是不可能的。访问struct成员时,编译器需要在编译时知道struct的类型。

虽然这两个结构可能包含具有通用名称的字段,但不能保证它们是相同(或兼容)的类型,或者它们在各自的结构中位于相同的偏移处。

答案 1 :(得分:0)

您可以将两个结构写为联合,并通过了解您是奴隶还是主人,访问正确的字段。这假定服务器发送的数据包格式为客户端所期望的格式,反之亦然。

为确保发送方和接收方的平台不重要,您必须对数据包进行序列化,或者使用其他协议协议对数据包进行编码和解码。