協議編碼TLV示例

2021-07-25 16:31:00 字數 4172 閱讀 2826

協議訊息體採用tlv格式編碼,全部使用小字節序

。tlv是一種變長編碼,其中

t表示tag

編碼,l表示資料的長度length,v表示資料的值value,tlv可以巢狀

表示,value本身也可以是tlv編碼。

tag欄位由固定2位元組

(byte)

組成,具體

含義如下:

tag型別(

byte1

高4位)

tlv編碼(

byte1

低4位) t

ag編碼(

byte2)

0:原始

型別 1:自定義型別 0:

基本編碼

1:結構編碼 每

種tag型別

共0~255個字段可用編碼。

byte1

的高4位用於表示tlv中tag的型別

,0表示

原始型別(如

bool

,int,

string,

float

等,用於描述具體訊息的值型別)。

1表示使用者自定義型別(用於描述協議中的訊息)。

byte1

的低4位表示tlv的編碼方式,0表示

基本編碼

,value本身即為值

。1表示結構編碼,value本身

是tlv

格式的編碼。

byte

2用於編碼

tag欄位的

具體含義,本協議

約定編碼的

tag及

含義如下

:基本型別,

當byte1

高4位為0時的

tag編碼 t

ag編碼(byte2)

desc

length

value 1

布林型bool 1

1:true,2:false 2

小整數tiny 1

-127~127 3

無符號小整數utiny 1

0~255 4

短整數short 2

-32768~32767 5

無符號短整數ushort 2

0~65535 6

整數int 4

-2147483648~2147483648 7

無符號整數uint 4

0~4294967295 8

長整數long 8

-2^64 ~ 2^64 9

無符號長整數ulong 8

0 ~2^65-1 10

單精度浮點數float 4

3.4*10^-38~3.4*10^38 11

雙精度浮點數double 8

1.7*10^-308~1.7*10^308 12

單字元char 1

ascii 13

字串string 可變

乙個或多個char組成 14

複數complex 可變

由1-9組成 15

空型別null 0

自定義型別,

當byte1

高4位為1時的

tag編碼 t

ag編碼(byte2)

desc

value型別

value 1

裝置序列號sn

string

如」sn180000001

234」 2

裝置廠家

tiny 1=

2= 3

裝置型別

tiny 1=

2= 4

系統型別

tiny

1=linux

2=windows

3= 5

系統版本

string

6 硬體型號

string

7 硬體版本

string

8 裝置出廠時間

uint 自

1970

-01-01 00:00:00

到當前時間的秒數 9

裝置mac位址

string

10 裝置啟動時間

uint

11 應用軟體版本

string

12 軟體更新時間

uint

13 軟體啟動時間

uint

14 軟體執行狀態

tiny

1=正常

2=異常 15

網絡卡描述

string

16 裝置ip位址

uint

ip位址的整數表示 17

子網掩碼

uint

18 閘道器

uint

19 dns伺服器

uint

20 網絡卡接收位元組數

long

21 網絡卡每秒接收位元組數

long

22 網絡卡傳送位元組數

long

23 網絡卡每秒傳送位元組數

long

24 cpu描述

string

25 cpu使用率

float

26 gpu描述

string

27 gpu使用率

float

28 記憶體描述

string

29 記憶體總大小

long

30 記憶體已用大小

long

31 記憶體空閒大小

long

32 記憶體使用率

float

33硬碟描述

string

34硬碟總大小

long

35硬碟已用大小

long

36硬碟空閒大小

long

37 硬碟使用率

float

length

欄位由固定2位元組表示value的長度,範圍為0~65535。

value欄位表示資料的值,tlv

編碼方式分為基本編碼和

結構編碼

,結構編碼的value本身也是tlv格式。基本

編碼:t l

v tl v

結構編碼:t

l t

l v

t l t

l v

如我們要傳送兩個字段裝置廠家和系統版本作為應答給客戶端。

則可以定義tlv編碼訊息體結構如下:

tag0x1102

自定義型別,結構編碼,tag表示裝置廠家(2)

length

0x0005

value的長度為5位元組 t

0x0002

基本型別,基本編碼,tag編碼表示tiny型別 l

0x0001

value的長度為1位元組 v

0x01 值為

1=***x

tag0x1105

自定義型別,結構編碼,tag表示系統版本(5)

length

0x0023

value的長度為35位元組 t

0x0013

基本型別,基本編碼,tag編碼表示string型別 l

0x001f

value的長度為31位元組 v

version 2.6.32-573.3.1.el6.i686

值為」version 2.6.32-573.3.1.el6.i686」

如上可見,上述協議雖然可以詳細的描述字段值的型別,但當tlv每巢狀一層,都會有4位元組增加(tag和length),所以一般通訊雙方可以按照協議對資料型別進行推定,省略第二層的tag和length。如確實需要可通過配置檔案了解欄位的型別,從而降低資料報的大小,節省流量。

則修改後的協議如下:t

0x1002

自定義型別,基本編碼,tag表示裝置廠家(2) l

0x0001

value的長度為1位元組 v

0x01 值為

1=***x t

0x1005

自定義型別,基本編碼,tag表示系統版本(5) l

0x001f

value的長度為31位元組 v

version 2.6.32-573.3.1.el6.i686

值為」version 2.6.32-573.3.1.el6.i686」



TLV格式及編碼

幾乎所有的需要在卡片和終端之間傳送的資料都是tlv格式的.pboc文件裡並沒有對tlv編碼細節做具體說明,而emv的手冊裡雖有敘述,但並不詳細.我下面就要很詳細的分析tlv的編碼格式並給出相應的tlv解碼的偽 tlv是tag,length和value的縮寫.乙個基本的資料元就包括上面三個域.tag唯...

TLV格式及編碼

幾乎所有的需要在卡片和終端之間傳送的資料都是tlv格式的.tlv是tag,length和value的縮寫.乙個基本的資料元就包括上面三個域.tag唯一標識該資料元,length是value域的長度.value就是資料本身了.舉個例子,下面是乙個tlv格式的aid 應用識別符號 位元組串 9f0607...

計算機tlv簡介 TLV 格式及編碼

tlv 格式及編碼 幾乎所有的需要在卡片和終端之間傳送的資料都是 tlv格式的 pboc 文件裡並沒有對 tlv編碼細節做具體說明 而emv 的手冊裡雖有敘述,但並不詳細 就要很詳細的分 析tlv 的編碼格式並給出相應的 tlv解碼的偽 tlv是 tag,length 和value 的縮寫乙個基本的...