Skip to content

数据结构:struct

说明:主要介绍数据结构的可视标准和序列化标准,包括常量格式、字节数据格式、基本序列化方式和数据类型规范。

可视标准

INT常量

使用 0x00xFFFFFFFF 表示

字节数据

使用FFFFFFFFFFFFFF格式,即为字节的16进制大写字符串,无空格逗号等分隔符,无0x前缀。该格式为强制标准,代码中调试输出,各程序对接调试对比、文档示例数据等,必须以此为准。不得出现空格分隔或0-255 {100,250} 等格式。

示例

  • 正确格式:FFFFFFFFFFFFFF
  • 错误格式:FF FF FF FF FF FF(有空格)
  • 错误格式:0xFF 0xFF 0xFF(有0x前缀和空格)
  • 错误格式:{255,255,255}(使用大括号和逗号)

序列化标准

基本序列化方式

ScpMessage 等基础数据结构外,其他载荷必须使用json和protobuf等通用序列化格式,不得自定义拼接二进制。

数据类型

无符号整数

必须精确类型为uint8uint16uint32uint64中的一种,文档或实现中均不可使用无长度限定的默认数据类型,例如intuint 等; 无符号整数序列化统一为小端序(LittleEndian)

类型说明

类型字节数取值范围说明
uint810 ~ 2558位无符号整数
uint1620 ~ 6553516位无符号整数,小端序
uint3240 ~ 429496729532位无符号整数,小端序
uint6480 ~ 1844674407370955161564位无符号整数,小端序

禁止使用

  • 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]    // 变长数据

物联网设备通信协议文档