1

我正在尝试将参数传递给 ksy 文件。该参数是另一个 ksy 文件类型。原因是我需要访问作为参数传递的 ksy 文件中的所有字段。那可能吗?如果是,请您提供语法代码片段,以便我可以模仿它。如果不是,另一种解决方案是什么?

谢谢你。

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

附属免责声明:我是Kaitai Struct维护者(请参阅我的GitHub 个人资料)。

首先,我建议始终使用Kaitai Struct Web IDE ( https://ide.kaitai.io/devel/ ) 的开发版本,而不是稳定版本。部署在https://ide.kaitai.io/的稳定 IDE有 0.8 版本的 KS 编译器,确实是最新的稳定版本,但目前已经 2 岁了。但是该项目正在积极开发中,每周都会有新的错误修复和改进,因此稳定的 Web IDE 已经过时了。并且由于最近的基础架构增强,现在每次更新编译器时都会重新构建开发 Web IDE,因此您甚至可以使用最新的功能。

但是,您将无法模拟您在 Web IDE 中描述的特定情况,因为它目前无法处理顶级参数类型(没有可以将您自己的值作为参数传递的挂钩)。但它应该在本地环境中工作。您可以将Web IDEcommontype.ksy中的和pty.ksy规范编译为您想要使用的目标语言(手册显示了如何做到这一点)。将它放在一起的代码可能如下所示(Java):

Commontype ct = new Commontype(new ByteBufferKaitaiStream(new byte[] { 80, 75 }));
Pty r = new Pty(
    new ByteBufferKaitaiStream(new byte[] { 80 }), // IO stream
    ct // commonword
);

请注意,Pty构造函数的实际参数顺序可能不同,例如在 Python 中,自定义参数 ( commonword) 首先出现,然后是 IO 对象。检查以您的特定语言生成的代码。

于 2020-02-22T16:13:05.070 回答