前言
本文将介绍物联网领域的JSON格式——CBOR,CBOR是专门为受限制物联网终端设计的数据交换格式,该格式轻量间接,可以简单理解为二进制形式JSON格式。CBOR格式可以与COAP协议组合使用,犹如HTTP+JSON;另外,CBOR也是COSE的基础。
CBOR简述
CBOR可分为8个主类型(Major Type),CBOR格式为了定义8种不同的类型,采用首字节的高3位定义主类型。 首字节的低5位在不同的主类型表示长度(除主类型0和主类型1),如果长度指示不足,则依次使用后续字节。
主类型
名称
首字节
简单说明
主类型0
无符号整数
0x00或 0x10
基础类型
主类型1
负整数
0x20或 0x30
基础类型
主类型2
字节数组
0x40或 0x50
基础类型
主类型3
字符串
0x60或 0x70
基础类型
主类型4
数组
0x80或 0x90
组合类型,可嵌套任意类型
主类型5
键值对
0xA0或 0xB0
组合类型,可嵌套任意类型
主类型6
扩展
0xC0或 0xD0
扩展类型
主类型7
数组
0xE0或 0xF0
浮点数与简单类型
无符号整数 an unsigned integer
主类型0,无符号整数编码后首字节为0b000_XXXXX。为了表达不同长度的无符号整数,CBOR格式使用第一个字节的低5位表示整数类型
0b000_11000 uint8_t
0b000_11001 uint16_t
0b000_11010 uint32_t
0b000_11011 uint64_t
请注意,无符号整数0到23直接表达,无需使用整数类型。
例如:
10 编码后 0x0A
24 编码后 0x1818
100 编码后 0x1864
1000 编码后 0x1903E8
负整数 a negative integer
主类型1,无符号整数编码后首字节为0b001_XXXXX。负整数的编码方式与无符号整数相似。
例如:
-10 编码后 0x29
-24 编码后 0x37
-100 编码后 0x3863
-1000 编码后 0x3903E7
字节数组 a byte string
主类型2,字节数组编码后首字节为0b010_XXXXX。为了表达字节数组长度,如果字符数组的长度小于等于23,那么直接使用首字节的低5位表示;如果长度大于或等于24字节,那么使用第二个字节表示长度;如果长度大于等于256字节,那么使用第二和第三个字节表示长度。
CBOR长度说明.png
CBOR格式中一般采用多字节组合的方式表达长度。CBOR这样的长度描述方法便于嵌入式设备使用C语言解析CBOR格式,节约宝贵的