我正在给自己上一门使用 Python 读取二进制文件的速成课程。我都是新手,所以请多多包涵。
文件格式的文档告诉我前 16 个字节是一个 GUID,进一步阅读告诉我这个 GUID 的格式如下:
typedef struct {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
byte Data4[8];
} GUID,
UUID,
*PGUID;
到目前为止,我们已经能够解压缩结构中的前三个条目,但我对 #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 顺便说一句)
Data1 到 3 都可以。如果我在它们上使用 hex(),我会得到我希望看到的正确数据(哇哦),我只是在这个字节数组的语法上失败了。
编辑:回答
我正在阅读 MS-DTYP 中定义的 GUID,这确定了它:
data = uuid.UUID(bytes_le=fp.read(16))