2016-07-08 154 views
1

我有一个二进制文件,它包含以下头文件:4字节的字符串,1字节的数字,然后是4字节的uint32数字。使用python解析二进制格式

我理解正确吗? sbet_data[0:3]是字符串,sbet_data[4:5]是1个字节的数字,那么4个字节的uint32数字有多长?我在哪里可以找到相应字节大小vs格式的良好图表,例如我也想知道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

我相信你试图从二进制数据中提取信息。那么这将工作

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构造函数解压缩数据。

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。 根据这些表格之一,uint64将是L

+0

这是否适合您? –