求一个解析嵌套TLV报文的方法

报文大致格式如下

DA[6] SA[6] ACTION[2] PORT[4] {(MAINTYPE[1] SUBTYPE[2] LEN[4] VALUE[LEN])...........(MAINTYPE[1] SUBTYPE[2] LEN[4] VALUE[LEN])} 0x00
阅读 11k
1 个回答
新手上路,请多包涵

在我们的应用中一般的方式(java、C)都是对于一个协议来说都一般都有一部分固定的协议字段,首先,根据固定的协议长度将固定的协议字段读取完。然后,再根据TLV的定义来读取TLV字段,我们一般的定义T(TAG)为2个字节short,L(Length)为2个字节short,那么你只需要根据前面读固定字段一样,先读取两个字节即读到T,再读取两个字节即读到了L,这时就要注意,根据读到的L的值再读取V(一般就是内容),如:读取L的最终结果为50个字节这么长那么读V的时候就直接读取50个字节,如果下面还有TLV字段那么就按前面的方式继续读取。当然,可以使用while的方式读取,对于多个。
还有就是要注意约定,如果TLV中V没有内容那么TL也最好要有值,这样保证读取的数据不会超过实际的字节数,这里说的只是我们应用中对于TLV的处理,只是提供一个思路希望有帮助!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进