Kaitai Struct - Как ссылаться на переменную объекта из импортированного файла KSY в качестве размера - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть внешний файл ksy, специально разработанный для хранения «объекта» в ksy, он содержит нечто, называемое coffee, где coffee имеет атрибуты identifier, length_in_bytes и flavor.

Я импортирую coffee в мой основной файл ksy и wi sh, чтобы использовать значение length_in_bytes в качестве атрибута size для другого "объекта", считываемого через seq.

. код ниже объяснит более кратко, что происходит:

testfile.ksy

meta:
  id: testfile
  imports:
     - drinks
  title: testfile
  # additional information here defining file-extension, endian and encoding
  # additional information here defining doc

seq:
  - id: drinksset
    type: drinks
    repeat: expr
    repeat-expr: 2

types:
  drinks:
    seq:
      - id: drinks_listings
        type: coffee
        size: coffee.length_in_bytes

drinks.ksy

meta:
   id: coffee
   title: coffee
   # additional information here defining file-extension encoding & endian
   # additional information here defining doc

types:
    coffee:
      seq: 
        - id: identifier
          type: u4
        - id: length_in_bytes
          type: u4
        - id: flavor
          type: u4

Моя проблема связана со строкой:

size: coffee.length_in_bytes
  • Я знаю это, потому что удаление этой строки позволяет файлу ksy успешно прочитать файл тестовых данных.
  • Когда у меня есть информация о типах кофе внутри testfile.ksy, возникает без проблем , только когда тип coffee импортируется в отдельный файл, который имеет проблемы.
  • Я могу читать другие атрибуты, которые я могу определить в coffee.ksy без проблем, например, объявив пользовательский тип данных с именем u4test с type: u4 и сославшись на него вместо u4 для flavor отлично работает.

Я полагаю, что это может быть проблема с печатанием Kaitai, и попробовал следующее:

  • size: coffee::length_in_bytes
  • size: coffee.as<coffee>.length_in_bytes
  • size: coffee.as<u4>.length_in_bytes
  • size: _parent.coffee.as<coffee>.length_in_bytes
  • size: _parent.coffee.as<u4>.length_in_bytes

Но ничего не помогло.

См. Kaitai.io

Спасибо, понимание ценится.

...