struct --- đóng gói và giải nén các kiểu dữ liệu nguyên thủy¶
Mô-đun này thực hiện các phép chuyển đổi giữa giá trị Python và các struct kiểu C được biểu diễn dưới dạng đối tượng bytes Python, sử dụng chuỗi định dạng để mô tả bố cục dữ liệu.
Các thứ tự byte sau đây được hỗ trợ:
Ký tự |
Thứ tự byte |
Kích thước |
Căn chỉnh |
|---|---|---|---|
@ |
native |
native |
native |
< |
little-endian |
standard |
none |
> |
big-endian |
standard |
none |
! |
network (= big-endian) |
standard |
none |
Các kiểu dữ liệu sau được hỗ trợ:
Định dạng |
Kiểu C |
Kiểu Python |
Kích thước chuẩn |
|---|---|---|---|
b |
signed char |
integer |
1 |
B |
unsigned char |
integer |
1 |
h |
short |
integer |
2 |
H |
unsigned short |
integer |
2 |
i |
int |
integer (1) |
4 |
I |
unsigned int |
integer (1) |
4 |
l |
long |
integer (1) |
4 |
L |
unsigned long |
integer (1) |
4 |
q |
long long |
integer (1) |
8 |
Q |
unsigned long long |
integer (1) |
8 |
e |
n/a (half-float) |
float (2) |
2 |
f |
float |
float (2) |
4 |
d |
double |
float (2) |
8 |
s |
char[] |
bytes |
|
P |
void * |
integer |
Yêu cầu hỗ trợ long khi dùng với các giá trị lớn hơn 30 bit.
Yêu cầu hỗ trợ dấu chấm động.
Khác biệt so với CPython
Khoảng trắng không được hỗ trợ trong chuỗi định dạng.
Ví dụ¶
Đóng gói và giải nén các giá trị little-endian. Tiền tố < chọn thứ tự byte little-endian với kích thước chuẩn và không căn chỉnh:
import struct
# Pack an unsigned short (H, 2 bytes) then an unsigned int (I, 4 bytes).
data = struct.pack("<HI", 7, 1000)
# data == b'\x07\x00\xe8\x03\x00\x00'
# Unpack returns a tuple of the values, in order.
struct.unpack("<HI", data)
# (7, 1000)
# calcsize() reports how many bytes the format needs.
struct.calcsize("<HI")
# 6
Đóng gói vào và giải nén từ một bộ đệm hiện có tại offset byte:
buf = bytearray(8)
# Write a little-endian signed int (i) at offset 2.
struct.pack_into("<i", buf, 2, -12345)
# buf == bytearray(b'\x00\x00\xc7\xcf\xff\xff\x00\x00')
# Read it back from the same offset.
struct.unpack_from("<i", buf, 2)
# (-12345,)
Hàm¶
- struct.pack(fmt: str, *values: Any) bytes¶
Đóng gói values theo chuỗi định dạng fmt. Giá trị trả về là một đối tượng bytes mã hóa các giá trị.
- struct.pack_into(fmt: str, buffer: Any, offset: int, *values: Any) None¶
Đóng gói values theo chuỗi định dạng fmt vào buffer bắt đầu tại offset. offset có thể âm để đếm từ cuối buffer.