zoukankan      html  css  js  c++  java
  • 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打包解包效率高,省内存。

  • 相关阅读:
    在线音视频(MP3/MP4)测试文件
    jQuery 找包含内容的节点,但不搜索子节点
    bash 脚本小练习:查看 git 提交对应的提交数
    桌面应用开发的日子(二):实现文件资源管理列表树加载
    桌面应用开发的日子(一):初识WPF
    Winform同一数据源多个控件保持同步
    Windows Form中DataGridView的基本玩法
    jsp第七周作业
    jsp第五周作业
    jsp第六周作业
  • 原文地址:https://www.cnblogs.com/neillee/p/6052898.html
Copyright © 2011-2022 走看看