将数组参数传递给Kaitai Struct用户定义类型

时间:2019-12-23 22:13:49

标签: kaitai-struct

我正在尝试Kaitai Struct解码一些数据。 我需要传递一个数组参数,但是ksc给出了一个错误。 以下是示例代码:

meta:
  id: cat_34

seq:
  - id: test1
    type: fixed([0,1,2])

types:
  fixed:
    params:
      - id: f_size
        #no type is just an array
    seq:
      - id: val
        type: u1
        repeat: expr
        repeat-expr: f_size[1] #trying to use second value of array.

它给出以下错误: cat_34:/ types / fixed / seq / 0 / repeat-expr:无法将操作[]应用于CalcBytesType

1 个答案:

答案 0 :(得分:0)

在参数声明中没有类型(或使用type: bytes)不会产生 byte数组类型(又称为“ CalcBytesType”),与 true数组某物。

在这种情况下,您会遇到一个错误:在Kaitai Struct v0.8及更低版本中未实现操作[],而在{0.9}中该操作only fixed recently and not for all targets不稳定。因此,您的选择之一就是升级到v0.9 +。

作为一种解决方法,您可能需要坚持使用真正的数组-即,不要传递[0, 1, 2],而要使用[0, 1, 2].as<u1[]>。这将适用于所有版本,但将产生(1)可能效率较低的真实数组,(2)可能不受支持的数组实例化。