CBOR

CBOR

簡明二進制對象展現(CBOR,Concise Binary Object Representation)是一種提供良好壓縮性,擴展性強,不需要進行版本協商的二進制數據交換形式。這些特性使它有別於早期的ASN.1和MessagePack等二進制序列化方式。RFC 7049定義了詳細的CBOR格式與說明。

基本介紹

  • 中文名:簡明二進制對象表示
  • 外文名:Concise Binary Object Representation(CBOR)
  • 類型:科技術語
CBOR編碼格式,CBOR的數據頭,

CBOR編碼格式

CBOR每個DataItem(數據項)的初始一個位元組包含兩個信息,高3位的Major Type(主要類型),低5位的Additional Information(附加信息)。
CBOR數據
數據項
位元組(byte)數
1位元組(CBOR Data Item Header)
動態長度
動態長度
結構
Major Type
Additional Information
Payload Length
(可選)
Data Payload
(可選)
位(bit)數
3 Bits
5Bits
動態長度
動態長度

CBOR的數據頭

主要類型
主要類型值
附加信息值(無符號)
附加信息說明
是否存在載荷長度域
是否存在數據載荷域
Unsigned Integer
0
0b000
5位附加信息可以是整數本身(附加信息值為0(含)到23(含))或數據的長度。
0(含)到23(含)
附加信息直接用作數據載荷
24
接下來的1個位元組uint8_t作為數據載荷
25
接下來的2個位元組uint16_t作為數據載荷
26
接下來的4個位元組uint32_t作為數據載荷
27
接下來的8個位元組uint64_t作為數據載荷
Negative Integer
1
0b001
數據載荷的值為-1減去待編碼的負整數
0(含)到23(含)
附加信息直接用作數據載荷
24
接下來的1個位元組uint8_t作為數據載荷
25
接下來的2個位元組uint16_t作為數據載荷
26
接下來的4個位元組uint32_t作為數據載荷
27
接下來的8個位元組uint64_t作為數據載荷
Byte String
2
0b010
使用附加信息作為位元組字元串的長度或聲明載荷長度域的長度
0(含)到23(含)
直接用來聲明載荷長度域
24
接下來的1個位元組uint8_t作為載荷長度域
25
接下來的2個位元組uint16_t作為載荷長度域
26
接下來的4個位元組uint32_t作為載荷長度域
27
接下來的8個位元組uint64_t作為載荷長度域
Text String
3
0b011
使用附加信息作為文本字元串的長度或聲明載荷長度域的長度
0(含)到23(含)
直接用來聲明載荷長度域
24
接下來的1個位元組uint8_t作為載荷長度域
25
接下來的2個位元組uint16_t作為載荷長度域
26
接下來的4個位元組uint32_t作為載荷長度域
27
接下來的8個位元組uint64_t作為載荷長度域
Array
4
0b100
Arrays(數組)也可以叫作Lists(列表), Sequences(序列), 或Tuples(元組). 長度域代表數組元素的個數。
0(含)到23(含)
直接用來聲明載荷長度域
24
接下來的1個位元組uint8_t作為載荷長度域
25
接下來的2個位元組uint16_t作為載荷長度域
26
接下來的4個位元組uint32_t作為載荷長度域
27
接下來的8個位元組uint64_t作為載荷長度域
...
保留
31
長度不確定的數組,編碼結束要加上Break Code(0xFF)
Map
5
0b101
鍵值對映射的數據項集合。Map(鍵值對)也被叫作Tables(表格), Dictionaries(字典), Hashes(哈希集)或Object(JSON中的對象)。Map中的長度域指數據項的對數。每個Map實體包含兩個按順序排列的數據項,一個數據項作為鍵,一個數據項作為值。
0(含)到23(含)
直接用來聲明載荷長度域
24
接下來的1個位元組uint8_t作為載荷長度域
25
接下來的2個位元組uint16_t作為載荷長度域
26
接下來的4個位元組uint32_t作為載荷長度域
27
接下來的8個位元組uint64_t作為載荷長度域
...
保留
31
長度不確定的Map,編碼結束要加上Break Code(0xFF)
Tag
6
0b110
用來作為其他Major Types(主要類型)可選語義標籤
0(含)到23(含)
-
24(含)到255(含)
-
256(含)到18446744073709551615(含)
-
Special
7
0b111
浮點數據和沒有內容,沒有結束碼的簡單數據類型
0(含)到23(含)
簡單值(在附加信息中聲明值)
24
簡單值(使用接下來的一個位元組表示32(含)到255(含)的值)
25
半精度浮點型(16位)
26
單精度浮點型(32位)
27
雙精度浮點型(64位)
28
保留
29
30
31
長度不確定的數據項,編碼結束要加上Break Code(0xFF)

相關詞條

熱門詞條

聯絡我們