繁体   English   中英

使用struct在python3.6中读取结构化二进制数据

[英]reading structured binary data in python3.6 using struct

我确实尝试过以多种方式寻找这种疑问,但也许是因为我从不使用二进制文件,直到我不知道搜索相似内容的关键字可以帮助我什么时候。 这就是为什么我在这里问。

所以,我有一个文件:

path = 'myPath/file.pd0'
in_file = open(path, "rb")
read_file = in_file.read()
type(read_file) 

当我尝试检查read_file中的内容时,我得到了:

b'\x7f\x7f\xcc\x05\x00\x0f$\x00`\x00\xa2\x00$\x02\xe6\x02\xa8\x03\xd0\x032\x04d\x04\x96\x04\xa6\x04\xe0\x04'

read_file的类型为字节。 当我尝试使用struct时,因为它是函数,人们建议我得到以下错误:

import struct
struct.unpack('hhl', read_file[0:30])

error: unpack requires a buffer of 16 bytes

无论我得到什么解压缩,都需要一个n字节的缓冲区。

我尝试读取的文件结构定义如下:

标题(6个字节+ [2 x数据类型数])

固定的领先者数据(60字节)

可变领导者数据(66个字节)

相关幅度(每个深度细胞2个字节+ 4个字节)

知道如何使用struct或类似python的方法开始读取这些字节吗?

谢谢

unpack()期望字节是其第一个参数描述的格式的确切长度。 格式字符串'hhl'描述了16个字节的数据(在您的计算机上-参见下文),因此您必须传递16个字节的字符串。如果只想解析部分字节,则可以执行以下操作:

fmt = 'hhl'
size = struct.calcsize(fmt)
struct.unpack(fmt, data[:size])

另外,您的格式字符串没有字节顺序,大小和对齐方式说明符 默认情况下假定为“本机”。 这意味着您的代码是与系统有关的,这可能不是解析文件格式所需要的。 您可能需要为文件的不同部分使用不同的对齐方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM