協議訊息體採用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 的縮寫乙個基本的...