我有一个具有“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”无法访问错误。
重复的次数取决于很多的东西,只是不从开泰访问,因此外部方法是一个完美的解决方案。
在此先感谢您的任何建议。
如果你知道类型的调用之前的重复次数,你可以声明,作为一个类型参数,并从你的应用程序通过它:
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);
}
}