python struct.unpack方法
时间: 2025-07-24 15:11:14 浏览: 12
### 使用 `struct.unpack` 方法解析二进制数据
`struct.unpack` 是 Python 中用于解析二进制数据的常用方法,特别适用于处理如网络协议、文件格式等底层数据结构。该方法按照指定的格式字符串(format string)将字节流转换为 Python 的元组(tuple),从而提取出原始数据。
#### 基本语法
```python
struct.unpack(fmt, buffer)
```
- `fmt`:格式字符串,定义了如何解析数据。格式字符包括 `i`(整数)、`f`(浮点数)、`s`(字符串)等。
- `buffer`:要解析的字节流,通常是一个 `bytes` 对象。
#### 格式字符串说明
格式字符串由一系列格式字符组成,每个字符代表一种数据类型。例如:
- `i`:表示一个整数(通常是 4 字节)。
- `f`:表示一个浮点数(通常是 4 字节)。
- `s`:表示一个字符串,其长度由前面的数字指定。
- 字节顺序可以通过添加字节顺序字符来控制,例如 `>` 表示大端模式,`<` 表示小端模式[^2]。
#### 示例代码
以下是一个使用 `struct.unpack` 解析二进制数据的示例:
```python
import struct
# 打包数据
packed_data = struct.pack('>i f', 12345, 3.14159)
print("打包结果:", packed_data)
# 解包数据
unpacked_data = struct.unpack('>i f', packed_data)
print("解包结果:", unpacked_data)
```
运行结果为:
```
打包结果: b'0\x00\x00\x00\x00\x00\x00@'
解包结果: (12345, 3.141590118408203)
```
上述代码中,`>i f` 表示使用大端模式解析一个整数和一个浮点数。`struct.unpack` 返回一个包含两个元素的元组,分别是解析出的整数和浮点数。
#### 数据大小计算
在处理二进制数据时,了解数据结构的大小非常重要。`struct.calcsize` 函数可以计算格式字符串所占用的字节数:
```python
size = struct.calcsize('>i f')
print("数据大小:", size)
```
运行结果为:
```
数据大小: 8
```
这表明格式字符串 `>i f` 所描述的数据结构占用 8 字节的内存空间[^3]。
#### 注意事项
- 格式字符串的字节顺序字符(如 `>`、`<`)必须与打包数据时使用的顺序一致,否则可能导致解析错误。
- `struct.unpack` 返回的数据类型与格式字符串中的字符一一对应,例如 `i` 返回整数,`f` 返回浮点数,`s` 返回字节字符串。
- 如果数据中包含字符串,格式字符串中需要指定字符串的长度,例如 `5s` 表示长度为 5 的字符串[^3]。
#### 示例:解析复杂数据结构
以下是一个更复杂的示例,展示了如何解析包含整数、浮点数和字符串的二进制数据:
```python
import struct
# 打包数据
packed_data = struct.pack('>i f 5s', 42, 3.14, b'Hello')
print("打包结果:", packed_data)
# 解包数据
unpacked_data = struct.unpack('>i f 5s', packed_data)
print("解包结果:", unpacked_data)
```
运行结果为:
```
打包结果: b'*\x00\x00\x00\x00\x00\x00@Hello'
解包结果: (42, 3.140000104904175, b'Hello')
```
在这个示例中,格式字符串 `>i f 5s` 表示解析一个整数、一个浮点数和一个长度为 5 的字符串。`struct.unpack` 返回一个包含三个元素的元组,分别对应解析出的整数、浮点数和字符串[^1]。
---
阅读全文
相关推荐



















