私は、ビット長フィールドとその長さに対応する値フィールドを持つバイナリ構造を持っています。値の長さには、フィールドの末尾がオクテット境界になるように十分な末尾のビットが埋められます。私は、その長さはそのため、例えば計算する必要があります。 for length = 24 bits; value length = 3 octets for length = 17 bits; value length = 3 octets for length = 31 bits; value length = 4 octets
など3進演算子を使用して長さを計算する
私はdocumentationで読んで、.ksy
ファイル内の三項演算子を使用することが可能です。だから私は、値フィールドのサイズを計算するには、次の式を持っている:
size: length % 8 == 0 ? length/8 : length/8 + 1
この式は解体WebIDEで完璧に動作しますが、私は、Javaクラスを生成しようとすると:
kaitai-struct-compiler -t java --java-package com.my.struct.package --verbose file mystruct.ksy
私は次のエラーを受け取ります:私はまた、このような独立した計算値で追加のオクテットの値を計算しようとした
parsing mystruct.ksy...
reading mystruct.ksy...
mapping values are not allowed here
in 'reader', line 194, column 44:
... e: length % 8 == 0 ? length/8 : length/8 + 1
^
:
を...
- id: prefix
size: length/8 + additional_octet
instances:
additional_octet:
value: (length % 8 == 0 ? 0 : 1)
...
同じエラーが発生します。
それあなたは 'size:length/8 +(length%8 == 0?0:1)'で試すことができますが、これは単なる推測です。あなたが提供するドキュメントは、式( 'length/8')ではなく値であることに注意してください。 – AxelH