Захватить три байта два дополнения со знаком с Kaitai - PullRequest
0 голосов
/ 27 сентября 2019

Kaitai Struct предлагает предопределенные типы для захвата, например, 2-байтовых целых чисел со знаком (s2be) или 4-байтовых целых чисел со знаком (s4be), но нет s3be и b24 захватывает 3-байтовыецелое число без знака (http://doc.kaitai.io/ksy_reference.html#_bit_size_integers). Есть ли способ сделать это?

field_a:
    seq:
      - id: two
        type: s2be
      - id: three
        type: ???
      - id: four
        type: s4be

1 Ответ

0 голосов
/ 28 сентября 2019

Есть несколько способов сделать это.Например, вы можете использовать что-то вроде этого для преобразования неподписанного в подписанное:

seq:
  - id: three
    type: s3be
types:
  s3be:
    seq:
      - id: unsigned_value
        type: b24
    instances:
      value:
        value: '(unsigned_value & 0x800000 != 0) ? (~(unsigned_value & 0x7fffff)) : unsigned_value'

Обратите внимание, что это будет тип пользователя, поэтому чтобы получить значение целого числа, вам нужно будет использовать three.value, а не только three.

...