Serialization BACnet反序列化:如何知道新的列表元素是否启动

Serialization BACnet反序列化:如何知道新的列表元素是否启动,serialization,binary-data,bacnet,Serialization,Binary Data,Bacnet,我正在实现一个通用的BACnet解码器,遇到了以下问题,我似乎无法在BACnet标准中找到答案。“20.2.1.3.2构造数据”一章没有回答我的问题,或者我可能没有完全理解它 让我们假设我有一个列表(序列),其中包含类型为Record(序列)的元素。 所述记录有4个字段,由上下文标记标识,其中字段0和1是可选的。 我进一步假设,这些字段序列化的顺序可以是任意的(因为它们由上下文标记标识)。 数据可能如下所示(数字表示字段/列): [{“3”、“0”、“2”}、{“1”、“2”、“3”}] 通过网

我正在实现一个通用的BACnet解码器,遇到了以下问题,我似乎无法在BACnet标准中找到答案。“20.2.1.3.2构造数据”一章没有回答我的问题,或者我可能没有完全理解它

让我们假设我有一个列表(序列),其中包含类型为Record(序列)的元素。 所述记录有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”的值开始

我的哪些假设是错误的

谢谢你和亲切的问候


Pascal

序列元素的顺序始终是已知的,并且不能被定义为任意的。此外,并非所有可能的组合都可以编码。关于BACnet,所有类型定义都应该是通用的可解码的。

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

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

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