C語言實現TLV訊息組成

2021-08-30 09:02:23 字數 916 閱讀 4300

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 的多...