2016-07-08 141 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

這是否適合您? –