使用python中的unpack读取不同格式的数据

时间:2013-03-10 16:48:00

标签: python

我对python很新,刚开始在某个地方工作。一直在试图理解由开发人员写的一段代码,而这些代码离开了,我无法弄清楚。

基本上,我熟悉unpack()的功能,但在某些地方使用的格式让我感到困惑!

var1, var2, var3, var4 = struct.unpack('!6xBB4xI4xI', data)

是4个变量的赋值语句。现在这就是我所知道的用于解包的格式,我认为是正确的: -

'x':值的分离(在下面的答案中由@ shx2指出的填充位)

!6:以BIG-ENDIAN格式从开头读取第7个字符(从索引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!

我对其他2种格式的解释可能也是错误的 - 我只是想从python在线文档和调试期间看到的数据中找出它。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:2)

你离开了......阅读doc

!是网络订单(= big-endian)。

x是填充字节。

我相信你可以弄明白其余的。

答案 1 :(得分:0)

使用Big Endian格式的数据时,struct.unpack('!6xBB4xI4xI', data)表示:

6:6个填充字节
B:一个未签名的字母 B:一个未签名的字符 4:填充字节
I:一个未签名的Int 4:填充字节
I:一个未签名的Int

总的来说,结构有24个字节