【发布时间】:2017-04-26 20:02:24
【问题描述】:
为了提供一些上下文,我正在解析一个 DICOM 文件,并且在使用 Transfer Syntax 条目来确定是使用隐式解析还是显式解析时遇到了困难。但是让我定义一个简化的语法,所以不需要 dicom 知识。
我们有一个条目序列,每个条目都有一个 group number 和一个 data 部分。组号始终表示为u2,但数据可以是不同的类型,比如u2 或u4。条目的顺序可以是任意的,除了所有带有group number == 2 的条目必须在顶部。所有带有group number == 2 的条目都具有u2 的数据类型,但后续数据部分可能不同。
困难的部分来了:所有带有group number != 2 的项目都具有数据类型u4,当且仅当之前存在与此完全相同的条目:
(group, data) == (0x0002, 0x0101)
以python为例,我会这样解析:
def read_entries(stream):
is_u4 = False
while not stream.eos():
group = stream.read_u2()
if group != 2 and is_u4:
data = stream.read_u4()
else:
data = stream.read_u2()
if group == 2 and data == 0x0101:
is_u4 = True
yield (group, data)
有没有办法使用 kaitai-struct 实现这一点?
【问题讨论】:
标签: python parsing kaitai-struct