我正在为一个项目编写一个通信协议,其中包含两个用于请求和响应的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编程中是否可行?
感谢。
答案 0 :(得分:0)
这是不可能的。访问struct成员时,编译器需要在编译时知道struct的类型。
虽然这两个结构可能包含具有通用名称的字段,但不能保证它们是相同(或兼容)的类型,或者它们在各自的结构中位于相同的偏移处。
答案 1 :(得分:0)
您可以将两个结构写为联合,并通过了解您是奴隶还是主人,访问正确的字段。这假定服务器发送的数据包格式为客户端所期望的格式,反之亦然。
为确保发送方和接收方的平台不重要,您必须对数据包进行序列化,或者使用其他协议协议对数据包进行编码和解码。