Appearance
数据结构:struct
说明:主要介绍数据结构的可视标准和序列化标准,包括常量格式、字节数据格式、基本序列化方式和数据类型规范。
可视标准
INT常量
使用 0x0,0xFFFFFFFF 表示
字节数据
使用FFFFFFFFFFFFFF格式,即为字节的16进制大写字符串,无空格逗号等分隔符,无0x前缀。该格式为强制标准,代码中调试输出,各程序对接调试对比、文档示例数据等,必须以此为准。不得出现空格分隔或0-255 {100,250} 等格式。
示例:
- 正确格式:
FFFFFFFFFFFFFF - 错误格式:
FF FF FF FF FF FF(有空格) - 错误格式:
0xFF 0xFF 0xFF(有0x前缀和空格) - 错误格式:
{255,255,255}(使用大括号和逗号)
序列化标准
基本序列化方式
除 ScpMessage 等基础数据结构外,其他载荷必须使用json和protobuf等通用序列化格式,不得自定义拼接二进制。
数据类型
无符号整数
必须精确类型为uint8、uint16、uint32、uint64中的一种,文档或实现中均不可使用无长度限定的默认数据类型,例如int 、 uint 等; 无符号整数序列化统一为小端序(LittleEndian)
类型说明:
| 类型 | 字节数 | 取值范围 | 说明 |
|---|---|---|---|
| uint8 | 1 | 0 ~ 255 | 8位无符号整数 |
| uint16 | 2 | 0 ~ 65535 | 16位无符号整数,小端序 |
| uint32 | 4 | 0 ~ 4294967295 | 32位无符号整数,小端序 |
| uint64 | 8 | 0 ~ 18446744073709551615 | 64位无符号整数,小端序 |
禁止使用:
int(长度不明确)uint(长度不明确)- 其他未明确指定长度的整数类型
字符串
一般而言,协议中都需要为定长字符串,例如 string[8] 这里的8代表最多为8个char。不足部分填0x0
格式说明:
- 定长字符串格式:
string[N],N为最大字符数 - 不足部分使用
0x0填充 - 示例:
string[8]表示最多8个字符,不足8个字符时用0x0填充
变长字节数据
使用uint16+byte[] 的组合结构,尽量放在协议尾部,以避免影响固定偏移数据读取。
结构说明:
- 长度字段:
uint16(2字节),表示后续字节数组的长度 - 数据字段:
byte[](变长),实际字节数据 - 位置要求:尽量放在协议尾部,避免影响固定偏移数据读取
示例结构:
[固定字段1]
[固定字段2]
...
[uint16 length] // 长度字段
[byte[] data] // 变长数据