2017-11-02 3 views
1

길이 필드가 비트 단위이고 값 필드가 해당 길이에 해당하는 2 진 구조입니다. 값 길이는 필드의 끝이 옥텟 경계에 오도록하기 위해 충분한 후행 비트로 채워집니다. 그 길이가 그 때문에, 예를 들어 계산해야 for length = 24 bits; value length = 3 octets for length = 17 bits; value length = 3 octets for length = 31 bits; value length = 4 octets 삼항 연산자를 사용하여 길이를 계산하십시오.

I가 documentation 판독대로 .ksy 파일 삼원 연산자를 사용하는 것이 가능하다. 그래서 값 필드의 크기를 계산하기 위해 다음과 같은 표현이 : 내가받을

kaitai-struct-compiler -t java --java-package com.my.struct.package --verbose file mystruct.ksy 

다음과 같은 오류 :

size: length % 8 == 0 ? length/8 : length/8 + 1 

이 표현은 해체 WebIDE에서 완벽하게 작동하지만를 내가 가진 자바 클래스를 생성 할 때 :

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) 
... 

그러나 같은 오류가 발생합니다.

+0

이 삼자 연산자를 가지고 싶지 않을 수도 있습니다 ... 당신은'size : length/8 + (길이 % 8 == 0? 0 : 1)'로 시도 할 수 있습니다. 그러나 이것은 단지 추측 일뿐입니다. 여러분이 제공하는 문서는 표현식 ('length/8')에 대한 것이 아니라 값에 관한 것입니다. – AxelH

답변

3

단순화 및 원계이 필요하지 않습니다 :

size: (length + 7)/8 

사용 해체 구조체, 나는 더 같은 식을 사용하는 방법에 대한 나의 의심을 가지고 있지; 여기에 내가 예상 한 것 코드 :가 : 기호의 표현을 나누기로

"... size: " + ((length + 7)/8) + " ..." 
4

가 실제로 문제가 YAML 파서,이 솔루션은 다음과 같이 따옴표로 표현을 넣어하는 것입니다

size: 'length % 8 == 0 ? length/8 : length/8 + 1' 
관련 문제