在文章CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法1)中,我们声明一个结构体DoIPMessage表示完整的DoIP车辆声明消息:
上半部分是DoIP报头通用部分(也就是所有类型的DoIP消息都有的),而payload是每个类型的DoIP消息独有的部分,对于车辆声明消息来说,用另一个结构体表示它:
DoIPMessage作为完整的DoIP消息,这意味着VehicleAnnouncement里的字段成员赋值后要转换成byte数组,然后复制到DoIPMessage里的Payload中。然后DoIPMessage里的字段成员赋值后再转换成byte数组,再放入一个UDP报文的Payload中。
这样的组装过程太复杂了。
既然DoIPMessage里的通用部分是每个类型的DoIP消息共有的,那能否把这部分拎出来用一个结构体表示呢?
_align(1) struct DoIPHeader
{
byte version;
byte inVersion;
word type;
dword length;