数据解析 - 结构体

Bittly 在通讯连接接收到数据后,可根据配置的结构体规则对数据进行解析,并支持设置结构体匹配条件。同时支持多种数据类型以及大小端字节序解析。

结构体解析规则配置

  1. 通讯连接内容编辑区域 中,切换到 「解析」 Tab。
  2. 解析规则表 右上角点击 「+」 按钮,添加一条新的解析规则。
  3. 在新增规则中,将 解析方式 设置为 「结构体」
  4. 点击该规则右侧的 编辑按钮,打开 结构体编辑对话框
  5. 在结构体编辑对话框中,根据数据的 字节排列顺序 依次添加并配置各字段的数据类型和顺序。
  6. 配置完成后,设置 结构体匹配条件

匹配条件说明:

当接收到的数据按照当前结构体规则解析后:

  • 如果 匹配条件成立,则认为该结构体解析成功;
  • 如果 匹配条件不成立,则认为解析失败,并继续尝试执行 下一条解析规则

数据类型

数据类型用于指定结构体属性的解析方式,对应 C 语言的基本数据类型或字节序规则。

数据类型 描述
U8 无符号 8 位整数(unsigned char)
U16 无符号 16 位整数(unsigned short)
U32 无符号 32 位整数(unsigned int)
U64 无符号 64 位整数(unsigned long long)
I8 有符号 8 位整数(signed char)
I16 有符号 16 位整数(signed short)
I32 有符号 32 位整数(signed int)
I64 有符号 64 位整数(signed long long)
float 32 位浮点数
double 64 位浮点数

字节序(Endian)

  • LE — 小端(Little Endian)
  • BE — 大端(Big Endian)

例如:

  • U16LE 表示 无符号 16 位整数,小端字节序
  • I32BE 表示 有符号 32 位整数,大端字节序

字符串与字节数组

  • string — 按指定长度解析为字符串
  • bytes — 按指定长度解析为字节数组

示例:

  • string[10] — 解析 10 个字节为字符串
  • bytes[4] — 解析 4 个字节为字节数组

表达式

在某些情况下,数据按照指定的数据类型解析完成后,其原始值可能仍需要进一步处理。例如设备返回的温度值为 1234,但实际温度需要将该值除以 100 才能得到最终结果。

为此,可以为属性配置 表达式 对解析结果进行二次计算。

表达式为 JavaScript 表达式,表达式的计算结果将作为该属性的最终解析值。

在表达式中:

  • $value 表示当前字段解析得到的原始值
  • 可以调用 通讯连接脚本中定义的自定义函数

示例

$value / 100

当原始解析值为 1234 时,最终解析结果为:

12.34

匹配条件

匹配条件用于判断当前数据是否符合该结构体的解析规则。

当 Bittly 接收到数据后,会按照已配置的结构体规则对数据进行解析,并将解析结果填充到对应的属性字段中。解析完成后,再根据配置的匹配条件进行判断,以确定该结构体是否匹配成功。

匹配条件为一个 JavaScript 表达式,当表达式计算结果为 true 时,表示该结构体解析匹配成功;否则认为解析失败,并继续尝试下一条解析规则。

在表达式中可以使用以下方式访问解析结果:

  • $('属性名') 用于获取结构体中指定字段解析后的值。
  • 自定义函数 可以直接调用通讯连接脚本中定义的自定义函数,用于实现更复杂的判断逻辑。

示例

$('type') === 1

checkPacket($('header'), $('length'))