首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用三元算子计算长度

用三元算子计算长度
EN

Stack Overflow用户
提问于 2017-11-02 09:19:20
回答 2查看 725关注 0票数 1

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

当我在文档中阅读时,可以在.ksy文件中使用三元操作符。因此,我有以下表达式来计算值字段大小:

代码语言:javascript
复制
size: length % 8 == 0 ? length / 8 : length / 8 + 1

这个表达式在Kaitai WebIDE中工作得很好,但是当我尝试用以下方法生成java类时:

代码语言:javascript
复制
kaitai-struct-compiler -t java --java-package com.my.struct.package --verbose file mystruct.ksy

我收到以下错误:

代码语言:javascript
复制
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
                                         ^

我也曾尝试以以下的计算值分别计算额外的八进制的数值:

代码语言:javascript
复制
...
      - id: prefix
        size: length / 8 + additional_octet

    instances:
      additional_octet:
        value: (length % 8 == 0 ? 0 : 1)
...

但同样的错误也会发生。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-02 09:35:25

简化和不需要三元结构:

代码语言:javascript
复制
size: (length + 7) / 8

没有使用kaitai,我更怀疑如何使用这样的表达式;我希望在这里使用代码:

代码语言:javascript
复制
"... size: " + ((length + 7) / 8) + " ..."
票数 3
EN

Stack Overflow用户

发布于 2017-11-02 09:37:44

实际上,问题在于YAML解析器在:符号处分解表达式时,解决方案是将表达式放入如下引号:

代码语言:javascript
复制
size: 'length % 8 == 0 ? length / 8 : length / 8 + 1'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47071573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档