我正在为一个项目编写一个通信协议(protocol),其中包括两个用于请求和响应的 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 编程中可能吗?
谢谢。
最佳答案
这是不可能的。当访问结构体成员时,编译器需要在编译时知道该结构体的类型。
尽管这两个结构可能具有具有共同名称的字段,但不能保证它们是相同(或兼容)的类型,或者它们在各自结构中的偏移量相同。
关于使用变量转换 C 结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992887/