使用变量强制转换C结构体



我正在为一个项目编写一个通信协议,其中包括两个用于请求和响应的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编程中可能吗?

谢谢。

这不可能。当访问结构体成员时,编译器需要在编译时知道该结构体的类型。

尽管这两个结构体的字段可能具有相同的名称,但不能保证它们是相同(或兼容)的类型,也不能保证它们在各自的结构体中位于相同的偏移位置。

您可以将这两个结构体写成一个联合体,通过了解您是从属结构体还是主结构体,可以访问适当的字段。这假设服务器发送的数据包是客户端期望的格式,反之亦然。

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

最新更新