博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TLV(类型—长度—值)格式及编码
阅读量:4667 次
发布时间:2019-06-09

本文共 983 字,大约阅读时间需要 3 分钟。

转自:

引子:

  前段时间在项目中第一次接触TLV,项目中用这种格式来传输图片,语音等。

关于TLV

  TLV是一种可变的格式,意为:Type类型, Lenght长度,Value值。Type:该字段是关于标签和编码格式的信息; Length:该字段是定义数值的长度; Value:字段表示实际的数值。Type和Length的长度固定,一般那是2、4个字节(unsigned short 或 unsigned long ,具体用哪种编码和解析统一就行了,本文就取unsigned long类型);Value的长度有Length指定;

  在介绍编码和解码方法之前,需要先了解一下大端和小端。由于网络字节序统一用的是大端,主机字节序列有的是大端,有的是小端,根据平台不同有所差异。所以在编码的时候需要用到两个函数:htonl: 主机字节序列转换成网络字节序列; ntohl: 网络字节序列转换成主机字节序列

编/解码

编码方法:

  1. 将类型type用htonl转换为网络字节顺序,指针偏移+4

  2. 将长度length用htonl转换为网络字节顺序,指针偏移+4
  3. 若值value数据类型为int、char、short,则将其转换为网络字节顺序,指针偏移+4;若值为字符串类型,写进后,指针偏移+length
  ……继续处理后面的tlv;

解码方法:

  1. 读取type 用ntohl转换为主机字节序得到类型,指针偏移+4

  2. 读取lengh用ntohl转换为主机字节序得到长度;指针偏移+4
  3. 根据得到的长度读取value,若value数据类型为int、char、short,用ntohl转换为主机字节序,指针偏移+4;若value数据类型为字符串类型,指针偏移+length
  ……继续处理后面的tlv;

TLV优点:

  1 一个编码值又称TLV(Type,Length,Value)三元组。编码可以是基本型或结构型,如果它表示一个简单类型的、完整的显式值,那么编码就是基本型 (primitive);如果它表示的值具有嵌套结构,那么编码就是结构型 (constructed)。

  2 TLV打包解包效率高,省内存。

转载于:https://www.cnblogs.com/neillee/p/6052898.html

你可能感兴趣的文章
win7,Ubuntu 12.04 双系统修改启动项顺序三方法
查看>>
python--列表推导式和生成表达式
查看>>
P - Psychos in a Line 单调队列
查看>>
POJ 2653 Pick-up sticks(计算几何)
查看>>
大型网站高并发的架构演变图-摘自网络
查看>>
8丶运行及总结
查看>>
Unity获取手机的电量时间
查看>>
Spring框架:Spring容器具体解释
查看>>
MongoDB 3.2 从安装到使用。
查看>>
lxc 一些有用的资源
查看>>
c# 内部类使用接口IComparer实现排序
查看>>
spring boot 项目搭建时,各个依赖的作用
查看>>
SaltStack
查看>>
提高你的Java代码质量吧:不要让类型默默转换
查看>>
HTML5 audio标签 打造属于自己的音乐播放器
查看>>
【第二组】典型场景:用户上传自定义谜题,工作序号:002,2017/7/6
查看>>
A Fast and Scalable Web Platform by Extending NGINX with Lua
查看>>
5.6 在线DDL (online DDL)详解
查看>>
电容计算公式
查看>>
MySQL高可用架构故障自动转移插件MHA
查看>>