【问题标题】:BACnet deserialization: How do I know if a new list elements startsBACnet 反序列化:我如何知道新的列表元素是否开始
【发布时间】:2016-10-26 08:08:55
【问题描述】:

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

假设我有一个 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”的值开始?

我的哪些假设是错误的?

谢谢你和亲切的问候

帕斯卡

【问题讨论】:

    标签: serialization binary-data bacnet


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-20
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 2011-04-06
        • 2019-05-20
        • 2011-06-24
        • 1970-01-01
        • 2013-06-20
        相关资源
        最近更新 更多