• TLV(类型—长度—值)格式及编码


    转自:
    http://www.cnblogs.com/tml839720759/archive/2014/07/13/3841820.html

    引子:

      前段时间在项目中第一次接触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打包解包效率高,省内存。

  • 相关阅读:
    简时——Beta冲刺 Day04
    简时——Beta冲刺 Day03
    简时——Beta冲刺 Day02
    SE_WorkX_提问回顾与个人总结
    通过SQL注入获得网站后台用户密码
    缓冲区溢出攻击与防范
    Pytorch_Part7_模型使用
    Pytorch_Part5_迭代训练
    Pytorch_Part2_数据模块
    Pytorch_Part1_简介&张量
  • 原文地址:https://www.cnblogs.com/neillee/p/6052898.html
Copyright © 2020-2023  润新知