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;
1 乙個編碼值又稱tlv(type,length,value)三元組。編碼可以是基本型或結構型,如果它表示乙個簡單型別的、完整的顯式值,那麼編碼就是基本型 (primitive);如果它表示的值具有巢狀結構,那麼編碼就是結構型 (constructed)。
2 tlv打包解包效率高,省記憶體。
Go語言實現TCP訊息傳送
go語言實現tcp訊息傳送,乙個伺服器端乙個客戶端,客戶端向伺服器端傳送訊息顯示到伺服器端,當客戶端傳送exit則退出客戶端。1.伺服器端 package main import fmt net func process con net.conn else func main defer liste...
C語言實現memcpy
memcpy和memmove都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊 的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。程式設計師面試寶典中有例題 對應的原型如下 v...
C語言實現多型
c 中的多型是指 通過基類物件的指標或者基類物件的引用呼叫虛函式 表現更多派生類的特性,但根據c 多型的實現,我們發現這種方法存在一定的空間和效率的折損。不可否認,多型輕鬆解決了很多任務程中遇到的問題,這與 pure c 的解決方法比起來,更為優雅。在考慮移植性上,c 的光芒要蓋過 c 但 c 的多...