複製鏈接
請複製以下鏈接發送給好友

CBOR

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

CBORCBOR編碼格式

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
動態長度
動態長度

CBORCBOR的數據頭

主要類型
主要類型值
附加信息值(無符號)
附加信息説明
是否存在載荷長度域
是否存在數據載荷域
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)