Хорошо, после долгих копаний я узнал, что простое TAG
на самом деле больше, чем просто число, TAG
само по себе фактически закодировало ветвь информации. Чтобы выяснить, содержит ли TLV
вложенные TLV
, чтобы мой код знал, когда продолжить обработку, а когда остановиться, мне пришлось декодировать TAG
.
Таким образом, TAG
содержит 8 бит, и каждый из них имеет особое значение:
Бит, который мне был нужен, был B5
, чтобы определить, является ли текущий TLV
Constructed
или нет... когда Constructed
это означает, что текущий TLV
состоит из нескольких TLV
, поэтому для моего кода я использую эту информацию для рекурсивного поиска в вложенный TLV
.
Когда TLV
не Constructed
, это мой останавливающий случай, чтобы вернуться обратно.
Вот вывод моей рекурсивной функции путем анализа данных и проверки бита B5
в TAG
:
11:20:38.428 Parsing: 61394F0BA00000030800001000010079074F05A000000308500E49442D4F6E65205049562042494F5F50107777772E6F626572746875722E636F6D7F66080202800002028000
11:20:38.436 Constructed Data Object
11:20:38.437 Parsing: 4F0BA00000030800001000010079074F05A000000308500E49442D4F6E65205049562042494F5F50107777772E6F626572746875722E636F6D
11:20:38.437 Primitive Data Object
11:20:38.437 tag: 79, len: 11, value: A000000308000010000100
11:20:38.437 Constructed Data Object
11:20:38.437 Parsing: 4F05A000000308
11:20:38.437 Primitive Data Object
11:20:38.437 tag: 79, len: 5, value: A000000308
11:20:38.437 Primitive Data Object
11:20:38.437 tag: 80, len: 14, value: 49442D4F6E65205049562042494F
11:20:38.437 MultiByte tag
11:20:38.437 Primitive Data Object
11:20:38.437 tag: 24400, len: 16, value: 7777772E6F626572746875722E636F6D
11:20:38.438 MultiByte tag
11:20:38.438 Constructed Data Object
11:20:38.438 Parsing: 0202800002028000
11:20:38.438 Primitive Data Object
11:20:38.438 tag: 2, len: 2, value: 8000
11:20:38.438 Primitive Data Object
11:20:38.438 tag: 2, len: 2, value: 8000
person
codenamezero
schedule
26.01.2017