用python解析二进制格式

时间:2016-07-08 05:31:50

标签: python python-3.x binary

我有一个带有以下标题的二进制文件:4字节字符串,1字节编号,然后是4字节uint32编号。

我能理解这一点吗? sbet_data[0:3]是字符串,sbet_data[4:5]是1字节数,那么4字节uint32号有多长?我在哪里可以找到相应字节大小与格式的良好图表,例如我也想知道8字节的大小(uint64)。

sbet_file = open('abc.dat')
sbet_data = sbet_file.read()

s = struct.Struct('4s b I')
unpacked_data = s.unpack(sbet_data[0:12])

2 个答案:

答案 0 :(得分:4)

您需要以二进制模式打开文件,并从文件中只读取12个字节:

import struct

with open('abc.dat', 'rb') as fobj:
    byte_string, n1, n4 = struct.unpack('4sbI', fobj.read(12)) 

您将获得一个字节字符串。假设它是ASCII,你可以像这样解码:

my_string = byte_string.decode('ascii')

struct的文档包含tables of format strings。 根据其中一个表格,uint64L

答案 1 :(得分:2)

我相信你正试图从二进制文件中提取信息。那么这将有效

import struct 
import numpy as np

buffer = np.random.bytes(12)
s = struct.Struct('4sbI')
unpacked_data = s.unpack(buffer)
print unpacked_data[0], unpacked_data[1], unpacked_data[2]

在这种情况下,unpacked_data[0]将是字符串,unpacked_data[1]将是1字节数字,4字节整数将是unpacked_data[2]

请记住,如果您想提高速度,还可以使用numpy来使用np.ndarray构造函数解压缩数据。