Я декодирую массив байтов в формате TLV
(Tag-Length-Value). Иногда Length
из Value
бесконечно. т.е. я должен читать последующие байты, пока не доберусь до двух последовательных нулевых байтов , означающих конец Value
. Проблема в том, что Value
TLV само по себе строится из другого TLV с бесконечным Length
. Я пытаюсь найти лучший способ декодировать такие TLV с вложенными бесконечными значениями.
В следующем примере каждый квадрат указывает один байт. После прочтения L1
я понимаю, что длина V1
бесконечна, что означает, что я должен читать последующие байты, пока не доберусь до двух нулевых байтов. Но первые два нулевых байта после L1
указывают на конец V3
, а не V1
:
V3
.
| end of V2
\ -----------
+----+----+----+----+----+----+----+----+----+----+----+----+----+
| T1 | L1 | T2 | L2 | T3 | L3 | 13 | 0 | 0 | 0 | 0 | 0 | 0 |
+----+----/----+----/----+----/----+----+----+----+----+----+----+
| | | ----------- -----------
| | | end of V3 end of V1
\ | |
V1 Starts here | |
| |
\ |
V2 Starts here |
|
\
V3 starts here
Мне нужен метод / алгоритм для определения конца V1
. Любой совет будет оценен!