当前位置:   article > 正文

协议之TLV编码格式

tlv

TLV格式都是由三个域构成:
标识域(Tag) + 长度域(Length) + 值域(Value);

一、TLV简介

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类型从网络序转换到主机序

3.1 编码步骤

1、使用 htonl 将 Tag(或Type)转成网络字节序,指针偏移 4;
2、使用 htonl 将 Length 转成网络字节序,指针偏移 4;
3、若值 Value 为 int、char、short、long 类型,将其转为网络字节序,指针偏移;若值为字符串,4、写入后指针偏移 Length;
重复上述三步,继续编码后面的 TLV 单元。

3.2 解码步骤

1、读取 Tag(或Type)并使用 ntohl 将其转成主机字节序,指针偏移4;
2、读取 Length ntohl** 将其转成主机字节序,指针偏移4;
3、根据得到的长度读取 Value,若为 int、char、short、long 类型,将其转为主机字节序,指针偏移;若值为字符串,读取后指针偏移 Length;
重复上述三步,继续读取后面的 TLV 单元。
参考链接:
https://zhuanlan.zhihu.com/p/62317518

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/497289
推荐阅读
相关标签
  

闽ICP备14008679号