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打包解包效率高,省內存。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM