调用外部代码以确定的次重复表达数

问题描述 投票:0回答:1

我有一个具有“ID”有重复表达,我需要重复一个未知的数倍数的顺序,我不知道这是目前支持。

data_channels:
  seq:
    - id: fast_data
      type: u2
      repeat: expr
      repeat-expr: ???

我希望能够做的就是调用计算重复正确的号码,并返回该号码开泰外部方法。喜欢:

data_channels:
  seq:
    - id: fast_data
      type: u2
      repeat: expr
      repeat-expr: CalulateRepetitions

然而,即使有“KS-不透明类型:真”中的元数据,我得到的是“CalculateRepetitions”无法访问错误。

重复的次数取决于很多的东西,只是不从开泰访问,因此外部方法是一个完美的解决方案。

在此先感谢您的任何建议。

kaitai-struct
1个回答
0
投票

如果你知道类型的调用之前的重复次数,你可以声明,作为一个类型参数,并从你的应用程序通过它:

data_channels:
  params:
    - id: num_items
      type: u4
  seq:
    - id: fast_data
      type: u2
      repeat: expr
      repeat-expr: num_items

如果你不知道解析之前,你仍然可以使用这种伎俩来弥补到不透明型和背部,即:

meta:
  id: your_main_type
  ksc-opaque-types: true
seq:
  - id: something
    type: u1
  # at this point we don't know number of repetitions yet
  - id: data_channels
    type: opaque_data_channels_wrapper

在此之后,执行OpaqueDataChannelsWrapper类在您的应用。如果有,它可能是类似的东西:

class OpaqueDataChannelsWrapper {
  public OpaqueDataChannelsWrapper(KaitaiStream io) {
    // do something here to determine number of repetitions

    // dive back into KaitaiStruct parsing with that information
    DataChannels realDataChannels = new DataChannels(io, numRepetitions);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.