代码之家  ›  专栏  ›  技术社区  ›  Sergii Bishyr

用三元算子计算长度

  •  1
  • Sergii Bishyr  · 技术社区  · 7 年前

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

    当我阅读时 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)
    ...
    

    但同样的错误也发生了。

    2 回复  |  直到 7 年前
        1
  •  4
  •   koczkatamas    7 年前

    实际上,问题是YAML解析器,因为它在 : 签名,解决方法是将表达式用引号括起来,如下所示:

    size: 'length % 8 == 0 ? length / 8 : length / 8 + 1'
    
        2
  •  3
  •   Joop Eggen    7 年前

    简化,不需要三元:

    size: (length + 7) / 8
    

    没有使用过kaitai结构,我更怀疑使用这样的表达式;我希望这里有代码:

    "... size: " + ((length + 7) / 8) + " ..."
    
    推荐文章