2016-07-08 53 views
1

私は次のヘッダーを持つバイナリファイルを持っています:4バイトの文字列、1バイトの数字、次に4バイトのuint32番号。Pythonでバイナリ形式を解析する

私はこれを正しく理解していますか? 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

私はバイナリから情報を抽出しようとしていると思います。さて、これはこの場合

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)) 

あなたはバイト文字列を取得します。 structのドキュメントはtables of format stringsが含まれてい

my_string = byte_string.decode('ascii') 

:それはASCIIであると仮定すると、あなたはこのようにデコードすることができます。 これらの表のうちの1つによれば、uint64Lである。

+0

これは機能しますか? –

関連する問題