2016-10-26 3 views
3

Я реализую общий декодер BACnet и наткнулся на следующий вопрос, о котором я не могу найти ответ в стандарте BACnet. Глава «20.2.1.3.2 Constructed Data» не отвечает на мой вопрос, или я не могу полностью ее понять.BACnet deserialization: Как узнать, запущены ли новые элементы списка?

Предположим, у меня есть список (ПОСЛЕДОВАТЕЛЬНОСТЬ) с элементами типа 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 »?

Какое из моих предположений неверно?

Спасибо и наилучшими пожеланиями

Паскаль

ответ

0

порядок элементов последовательности всегда известны и не должны быть произвольно по определению. Кроме того, нельзя кодировать не все мыслимые комбинации. Что касается BACnet, все определения типов должны быть декодируемыми универсально.

Смежные вопросы