TLV就是Tag+Length+Value
Tag(1或者多字节):
Tag首字节:
Bit7:0表示tag只有1字节, 1表示tag是多字节
Bit6表示通用编码tag还是私有编码tag解析
第5bit为0/1分别表示Value字段按照基本类型编码或者TLV方式编码。
Bit0~4,如果 Tag Value小于31,直接放Tag Value,大于31,随后的字节是Tag Value,并且这5bit全部写1。
Tag后续字节:
每个字节只用7bit,bit0~6,最高位bit7用来标志是否还有后续字节(1:Yes 0:No)。比如说Tag Value为:
00000001 11111111 11111111 (131071)写入tag value就是10000111 1111111 01111111
Length:描述Value字段的字节数
分为定长和不定长两种
定长:
分为短形式/长形式两种
短形式:
bit7为0,表示Length一个字节内就可以描述Value的字节数,也就是Value占用0-127字节
长形式:Value超过127字节,Length用多字节描述,此时第一个字节bit7为1,bit0-6表示Length字段的长度,然后Length的值跟在后面,可见Length字段最大是127字节。
比如说Value有234字节——1110 1010,超过了127,Length字段为 10000001 1110 1010(第一个字节描述Length字段是一个字节,然后后面一个字节描述Value的长度)
变长:
Length的第一个字节固定写0x80,然后写Value,最后用两个0x00收尾
可以看到通过Length的第一个字节就把短形式,长形式,变长三种方式区分开
Value:
实际的数据