java - 使用三元运算符计算长度

标签 java binary kaitai-struct

我有一个二进制结构,它有一个以位为单位的长度字段和对应于该长度的值字段。值长度用足够的尾随位填充,以使字段的末尾落在八位字节边界上。我需要计算那个长度,例如: 长度 = 24 位;值长度 = 3 个八位字节 长度 = 17 位;值长度 = 3 个八位字节 长度 = 31 位;值长度 = 4 个八位字节

正如我在 documentation 中读到的那样可以在 .ksy 文件中使用三元运算符。所以我有以下表达式来计算值字段大小:

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

这个表达式在 Kaitai 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)
...

但是出现同样的错误。

最佳答案

实际上问题出在 YAML 解析器,因为它在 : 符号处破坏了表达式,解决方案是将表达式放在引号中,如下所示:

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

关于java - 使用三元运算符计算长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47071573/

相关文章:

Python: 使用 Kaitai Struct 读取 ID3v1 标签

python - 根据先前的元素解析项目

Java - Swing GUI 窗口顺序

java - "else if"在 Java 中是一个整体还是两个单独的关键字?

javascript - 二进制到十进制转换器问题

java - 将整数转换为二进制并打印数字之和

c - 用于解释简单指令集的程序

java - 奇怪的问题 - Glassfish 3.1.1 Server 和 Eclipse Indigo

soap - 打开 JDK 7 和 Oracle JDK 7 Soap 客户端

Windows注册表数据库解析