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

-1 投票
2 回答
743 浏览
提问于 2025-04-17 18:35

我刚开始学习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

你说得完全不对……去看看这个文档吧。

! 表示网络字节顺序(也就是大端序)。

x 是填充字节。

我相信你能搞明白其他的内容。

0

在大端格式的数据中,struct.unpack('!6xBB4xI4xI', data) 的意思是:

6: 6个填充字节
B: 一个无符号字符
B: 一个无符号字符
4: 填充字节
I: 一个无符号整数
4: 填充字节
I: 一个无符号整数

总的来说,这个结构体占用了24个字节

撰写回答