使用 Kaitai Struct 时出现 EOF 错误
Posted
技术标签:
【中文标题】使用 Kaitai Struct 时出现 EOF 错误【英文标题】:EOF error is given iwhile using Kaitai Stuct 【发布时间】:2018-09-20 09:05:50 【问题描述】:我正在使用 Python 创建一个二进制解析器。
但是,即使数据文件上的字节仍然存在,它也会给出EOF error
。
有没有人面临同样的问题?无论如何要克服这个问题?
from btsv3 import Btsv3
import os
import binascii
import csv
for root, dirs, files in os.walk("./Perf/BTS/", topdown=False):
for name in files:
g = Btsv3.from_file(os.path.join(root, name))
if g.header.version == 3:
print(os.path.join(root, name), "Version 3")
# Header
print("BTS ID:", g.header.btsid, " | VERSION:", g.header.version, " | TOTAL LENGTH:", g.header.len, "\n")
# Payload
print("L3 perf data of BTS")
print("Payload tag:", g.payload.l3tag)
print("Payload length:", g.payload.l3len)
【问题讨论】:
【参考方案1】:通常,意外的 EOFError 表示格式规范有问题,并且解析出错了。
由 ksc 生成的代码实际上是相当可读的,因此您也可以对其进行调试。您可以检查 EOFError 提供的堆栈跟踪,并查看它到底发生在哪里。如果需要,您可以将更多调试打印直接添加到 ksc 生成的解析器代码中,或在调试器下运行等。
另一种选择是将您的 .ksy 加载到某种可视化工具(即this command-line one 或this WebIDE)中,看看是否会更清楚问题出在哪里。
【讨论】:
以上是关于使用 Kaitai Struct 时出现 EOF 错误的主要内容,如果未能解决你的问题,请参考以下文章