私は、Python を使用してバイナリ ファイルを読み取るための短期集中コースを自分自身に与えています。どちらも初心者ですので、ご容赦ください。
ファイル形式のドキュメントによると、最初の 16 バイトは GUID であり、さらに読むと、この GUID は次のようにフォーマットされていることがわかります。
typedef struct {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
byte Data4[8];
} GUID,
UUID,
*PGUID;
構造体の最初の 3 つのエントリをアンパックできるようになりましたが、#4 で困惑しています。8バイトの配列だと思いますが、解凍する方法がわかりません。
import struct
fp = open("./file.bin", mode='rb')
Data1 = struct.unpack('<L', fp.read(4)) # unsigned long, little-endian
Data2 = struct.unpack('<H', fp.read(2)) # unsigned short, little-endian
Data3 = struct.unpack('<H', fp.read(2)) # unsigned short, little-endian
Data4 = struct.unpack('<s', bytearray(fp.read(8))) # byte array with 8 entries?
struct.error: unpack requires a bytes object of length 1
Data4 の何が間違っていますか? (私はPython 3.2 BTWを使用しています)
Data1 から 3 までは OK です。それらに hex() を使用すると、期待どおりの正しいデータが得られます (woohoo)。このバイト配列の構文でフェールオーバーしているだけです。
編集:答え
MS-DTYPで定義されているGUIDを読んでいますが、これでうまくいきました:
data = uuid.UUID(bytes_le=fp.read(16))