赞
踩
TLV格式都是由三个域构成:
标识域(Tag) + 长度域(Length) + 值域(Value);
TLV是一种可变的格式,其中
1、T:tag 或者 Type, 用于标识标签或者编码格式信息,长度固定:2 - 4字节;
2、L:定义数值的长度,长度固定:2 - 4字节;
3、V:实际的数值,长度由 Length 指定。
双方必须统一**数据格式以及字节序(大小端)**。
假设 Tag(或Type) 和 Length 都是 4 字节表示。
储备知识点:
网络字节顺序采用大端排序方式,主机大多采用小端排序方式;
参考链接:https://blog.csdn.net/qq_34176606/article/details/115653421
转换字节顺序的四个函数如下:
htons 把unsigned short类型从主机序转换到网络序
htonl 把unsigned long类型从主机序转换到网络序
ntohs 把unsigned short类型从网络序转换到主机序
ntohl 把unsigned long类型从网络序转换到主机序
1、使用 htonl 将 Tag(或Type)转成网络字节序,指针偏移 4;
2、使用 htonl 将 Length 转成网络字节序,指针偏移 4;
3、若值 Value 为 int、char、short、long 类型,将其转为网络字节序,指针偏移;若值为字符串,4、写入后指针偏移 Length;
重复上述三步,继续编码后面的 TLV 单元。
1、读取 Tag(或Type)并使用 ntohl 将其转成主机字节序,指针偏移4;
2、读取 Length ntohl** 将其转成主机字节序,指针偏移4;
3、根据得到的长度读取 Value,若为 int、char、short、long 类型,将其转为主机字节序,指针偏移;若值为字符串,读取后指针偏移 Length;
重复上述三步,继续读取后面的 TLV 单元。
参考链接:
https://zhuanlan.zhihu.com/p/62317518
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。