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

  1. Yêu cầu hỗ trợ long khi dùng với các giá trị lớn hơn 30 bit.

  2. 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.calcsize(fmt: str) int

Trả về số byte cần thiết để lưu trữ định dạng fmt đã cho.

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.

struct.unpack(fmt: str, data: bytes) Tuple

Giải nén từ data theo chuỗi định dạng fmt. Giá trị trả về là một tuple các giá trị đã giải nén.

struct.unpack_from(fmt: str, data: bytes, offset: int = 0, /) Tuple

Giải nén từ data bắt đầu tại offset theo chuỗi định dạng fmt. offset có thể âm để đếm từ cuối data. Giá trị trả về là một tuple các giá trị đã giải nén.