1

我正在尝试 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: unable to apply operation [] to CalcBytesType

4

1 回答 1

1

参数声明中没有类型(或 using type: bytes)会产生字节数组类型(AKA“CalcBytesType”),这与真正的数组不同。

在这种情况下,您会遇到一个错误,即[]Kaitai Struct v0.8 及更低版本中未实现操作,并且该错误仅在最近修复,并非针对0.9 中的所有目标都不稳定。因此,您的选择之一是升级到 v0.9+。

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

于 2019-12-23T23:34:46.047 回答