在Python中使用unpack读取不同格式的数据
我刚开始学习Python,最近在一个地方工作。现在我正在试图理解一段代码,这段代码是之前一位开发者写的,但他已经离开了,我一直搞不明白。
基本上,我对unpack()这个函数有一些了解,但在某些地方使用的格式让我感到困惑!
var1, var2, var3, var4 = struct.unpack('!6xBB4xI4xI', data)
这是给四个变量赋值的语句。关于这个解包格式,我总结出了一些我认为是正确的内容:
'x':表示值之间的分隔(就像@shx2在下面的回答中提到的填充位)
!6:表示从开始的第七个字符(从索引0开始)以大端格式读取
I:表示无符号整数
Now, I haven't been able to figure out the formats:-
BB4 - does that mean read 8 bytes (as the B stands for unsigned char, so BB could mean 2 sets of unsigned char)?
I4 - reading 4 bytes and getting the integer value!
我对其他两个格式的理解可能也不太准确——我只是根据Python的在线文档和调试时看到的数据在努力搞明白。如果我哪里错了,请指正。
2 个回答
2
0
在大端格式的数据中,struct.unpack('!6xBB4xI4xI', data)
的意思是:
6
: 6个填充字节
B
: 一个无符号字符
B
: 一个无符号字符
4
: 填充字节
I
: 一个无符号整数
4
: 填充字节
I
: 一个无符号整数
总的来说,这个结构体占用了24个字节