BACnet反序列化:我如何知道新的列表元素是否开始

时间:2016-10-26 08:08:56

标签: serialization binary-data bacnet

我正在实施一个通用的BACnet解码器并遇到了以下问题,我似乎无法在BACnet标准中找到答案。章节" 20.2.1.3.2构建数据"不回答我的问题,或者我可能不完全理解它。

假设我有一个List(SEQUENCE OF),其元素类型为Record(SEQUENCE)。 所述记录具有4个字段,由上下文标记标识,其中字段0和1是可选的。 我进一步假设这些字段被序列化的顺序可以是任意的(因为它们由它们的上下文标记识别)。 数据可能看起来像(数字表示字段/列): [{" 3"," 0",2" },{" 1"," 2"," 3"}]

通过电线,唯一的"结构信息"我假设我得到的是列表的打开/关闭标签。 这意味着:

Open Tag List
  ctxTagColumn3, valueColumn3,
  ctxTagColumn0, valueColumn0,
  ctxTagColumn2, valueColumn2,
  ctxTagColumn1, valueColumn1,
  ctxTagColumn2, valueColumn2,
  ctxTagColumn3, valueColumn3
Close Tag List

在我读完第一个列表项的最后一列数据(" 2")之后,我怎么知道我必须开始解码第二个项目,从列的值开始" 1"

我的哪些假设是错误的?

谢谢你,亲切的问候

帕斯卡

2 个答案:

答案 0 :(得分:0)

SEQUENCE元素的顺序始终是已知的,并且不应根据定义任意选择。此外,并非所有可想到的组合都可以编码。关于BACnet,所有类型定义都应该是普遍可解码的。

答案 1 :(得分:0)

假设我理解正确; “顺序”不能是“任意的”;即:

SEQUENCE = *ordered* collection of variables of **different** types

SEQUENCE OF = *ordered* collection of variables of **same** type