Вот простая структура длины тега-значения, определенная с использованием библиотеки construct
для Python:
Tlv = Struct(
'tag' / Int16ub,
'length' / Int32ub,
'value' / Array(this.length, Byte)
)
if __name__ == '__main__':
tlv_data = dict(tag=1, length=5, value=b'\xFF\xFF\xFF\xFF\xFF')
encoded = Tlv.build(tlv_data)
print(encoded)
decoded = Tlv.parse(encoded)
print(decoded)
Хотя пример правильно кодирует и декодирует данные, мне нужно знать длину *Заранее введите поле 1005 * и предоставьте его с помощью параметра length
.
Существует ли подход, который позволяет мне инициализировать структуру путем пропускания минимального значения, т. Е. tlv_data = dict(tag=1, value=b'\xFF\xFF\xFF\xFF\xFF')
, и заставить ее вычислить еевладеть, каким должно быть адекватное значение поля length
?
В то же время, когда я анализирую необработанные данные, я ожидаю, что он извлечет длину из необработанных данных и затем убедится, что value
это действительно много байтов.
Это должно работать в принципе, или я неправильно понимаю идеологию construct
?