Hướng dẫn python struct pack list - danh sách gói cấu trúc python

Mã nguồn: lib/struct.py Lib/struct.py Lib/struct.py


Mô -đun này thực hiện chuyển đổi giữa các giá trị python và các cấu trúc C được biểu thị dưới dạng các đối tượng Python

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9. Điều này có thể được sử dụng để xử lý dữ liệu nhị phân được lưu trữ trong các tệp hoặc từ các kết nối mạng, trong số các nguồn khác. Nó sử dụng các chuỗi định dạng làm mô tả nhỏ gọn về bố cục của các cấu trúc C và chuyển đổi dự định sang/từ các giá trị python.Format Strings as compact descriptions of the layout of the C structs and the intended conversion to/from Python values.Format Strings as compact descriptions of the layout of the C structs and the intended conversion to/from Python values.

Ghi chú

Theo mặc định, kết quả của việc đóng gói một cấu trúc C đã cho bao gồm các byte pad để duy trì sự liên kết thích hợp cho các loại C liên quan; Tương tự, căn chỉnh được tính đến khi giải nén. Hành vi này được chọn sao cho các byte của một cấu trúc được đóng gói tương ứng chính xác với bố cục trong bộ nhớ của cấu trúc c tương ứng. Để xử lý các định dạng dữ liệu độc lập với nền tảng hoặc bỏ qua các byte pad ngầm, hãy sử dụng kích thước và căn chỉnh

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
0 thay vì kích thước và căn chỉnh
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
1: Xem thứ tự byte, kích thước và căn chỉnh để biết chi tiết.Byte Order, Size, and Alignment for details.Byte Order, Size, and Alignment for details.

Một số hàm

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
2 (và phương pháp của
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
3) có đối số bộ đệm. Điều này đề cập đến các đối tượng thực hiện giao thức bộ đệm và cung cấp bộ đệm có thể đọc được hoặc dễ đọc. Các loại phổ biến nhất được sử dụng cho mục đích đó là
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9 và

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
0, nhưng nhiều loại khác có thể được xem như một mảng byte thực hiện giao thức bộ đệm, để chúng có thể được đọc/điền mà không cần sao chép thêm từ đối tượng
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9.Buffer Protocol and provide either a readable or read-writable buffer. The most common types used for that purpose are
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9 and
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
0, but many other types that can be viewed as an array of bytes implement the buffer protocol, so that they can be read/filled without additional copying from a
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9 object.Buffer Protocol and provide either a readable or read-writable buffer. The most common types used for that purpose are
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9 and
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
0, but many other types that can be viewed as an array of bytes implement the buffer protocol, so that they can be read/filled without additional copying from a
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
9 object.

Chức năng và ngoại lệ

Mô -đun xác định ngoại lệ và chức năng sau:

Ngoại lệ ________ 12 ________ 13¶

Ngoại lệ được nâng lên trong các dịp khác nhau; Đối số là một chuỗi mô tả những gì sai.

________ 12 ________ 15 (Định dạng, V1, V2, ...)(format, v1, v2, ...)¶(format, v1, v2, ...)

Trả về một đối tượng byte chứa các giá trị v1, v2, được đóng gói theo định dạng chuỗi định dạng. Các đối số phải khớp với các giá trị theo yêu cầu của định dạng chính xác.

________ 12 ________ 17 (Định dạng, bộ đệm, Offset, V1, V2, ...)(format, buffer, offset, v1, v2, ...)¶(format, buffer, offset, v1, v2, ...)

Đóng gói các giá trị v1, v2, theo định dạng chuỗi định dạng và ghi các byte được đóng gói vào bộ đệm bộ đệm có thể ghi bắt đầu ở độ lệch vị trí. Lưu ý rằng bù là một đối số bắt buộc.

________ 12 ________ 19 (Định dạng, bộ đệm) ¶(format, buffer)¶(format, buffer)

Giải nén từ bộ đệm bộ đệm (có lẽ được đóng gói bởi

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
0) theo định dạng chuỗi định dạng. Kết quả là một tuple ngay cả khi nó chứa chính xác một mục. Kích thước bộ đệm trong byte phải khớp với kích thước theo yêu cầu của định dạng, như được phản ánh bởi
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
1. ________ 12 ________ 23 (định dạng, /, bộ đệm, offset = 0) ¶(format, /, buffer, offset=0)¶(format, /, buffer, offset=0)

Giải nén từ bộ đệm bắt đầu ở vị trí bù, theo định dạng chuỗi định dạng. Kết quả là một tuple ngay cả khi nó chứa chính xác một mục. Kích thước bộ đệm trong byte, bắt đầu ở độ lệch vị trí, phải ít nhất là kích thước theo yêu cầu của định dạng, như được phản ánh bởi

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
1. ________ 12 ________ 26 (Định dạng, bộ đệm) ¶(format, buffer)¶(format, buffer)

Lặp đi lặp lại từ bộ đệm bộ đệm theo định dạng chuỗi định dạng. Hàm này trả về một trình lặp sẽ đọc các khối có kích thước như nhau từ bộ đệm cho đến khi tất cả các nội dung của nó đã được tiêu thụ. Kích thước bộ đệm trong byte phải là bội số có kích thước theo định dạng, như được phản ánh bởi

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
1.

Mỗi lần lặp lại mang lại một tuple như được chỉ định bởi chuỗi định dạng.

Mới trong phiên bản 3.4.

________ 12 ________ 29 (Định dạng) ¶(format)¶(format)

Trả về kích thước của cấu trúc (và do đó của đối tượng byte được tạo bởi

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
0) tương ứng với định dạng chuỗi định dạng.

Định dạng chuỗi

Chuỗi định dạng là cơ chế được sử dụng để chỉ định bố cục dự kiến ​​khi đóng gói và giải nén dữ liệu. Chúng được xây dựng từ các ký tự định dạng, chỉ định loại dữ liệu được đóng gói/giải nén. Ngoài ra, có các ký tự đặc biệt để kiểm soát thứ tự byte, kích thước và căn chỉnh.Format Characters, which specify the type of data being packed/unpacked. In addition, there are special characters for controlling the Byte Order, Size, and Alignment.Format Characters, which specify the type of data being packed/unpacked. In addition, there are special characters for controlling the Byte Order, Size, and Alignment.

Thứ tự byte, kích thước và căn chỉnh

Theo mặc định, các loại C được biểu diễn theo định dạng gốc của máy và thứ tự byte và được căn chỉnh đúng cách bằng cách bỏ qua byte byte nếu cần thiết (theo các quy tắc được sử dụng bởi trình biên dịch C).

Ngoài ra, ký tự đầu tiên của chuỗi định dạng có thể được sử dụng để chỉ ra thứ tự byte, kích thước và sự liên kết của dữ liệu được đóng gói, theo bảng sau:

Tính cách

Đơn đặt hàng byte

Kích thước

Liên kết

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
1

native

native

native

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
2

native

Tiêu chuẩn

không ai

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
3

little-endian

Tiêu chuẩn

không ai

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
3

big-endian

Tiêu chuẩn

không ai

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
3

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
4

Tiêu chuẩn

không ai

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
4

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
5

Mạng (= Big-Endian)

Nếu nhân vật đầu tiên không phải là một trong số này,

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
6 được giả định.Format Characters section.

Kích thước và căn chỉnh gốc được xác định bằng cách sử dụng biểu thức trình biên dịch C ____ ____38. Điều này luôn được kết hợp với thứ tự byte bản địa.

Kích thước tiêu chuẩn chỉ phụ thuộc vào ký tự định dạng; Xem bảng trong phần Định dạng ký tự.Format Characters section.

Lưu ý sự khác biệt giữa

>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
6 và
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
90: Cả hai đều sử dụng thứ tự byte gốc, nhưng kích thước và sự liên kết của cái sau được tiêu chuẩn hóa.

Notes:

  1. Mẫu

    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    91 đại diện cho thứ tự byte mạng luôn luôn lớn như được định nghĩa trong IETF RFC 1700.

  2. Không có cách nào để chỉ ra thứ tự byte không bản địa (hoán đổi byte); Sử dụng lựa chọn thích hợp của

    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    92 hoặc
    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    93.

  3. Đadding chỉ tự động được thêm vào giữa các thành viên cấu trúc liên tiếp. Không có đệm được thêm vào ở đầu hoặc cuối của cấu trúc được mã hóa.Examples.

Không có đệm được thêm vào khi sử dụng kích thước và căn chỉnh không bản địa, ví dụ: với ‘,, = =, và‘!

Để căn chỉnh phần cuối của cấu trúc với yêu cầu căn chỉnh của một loại cụ thể, hãy kết thúc định dạng bằng mã cho loại đó với số lượng lặp lại bằng không. Xem ví dụ.Examples.

Định dạng ký tự lor

Các ký tự định dạng có nghĩa sau; Việc chuyển đổi giữa các giá trị C và Python nên rõ ràng với các loại của chúng. Cột kích thước tiêu chuẩn, đề cập đến kích thước của giá trị đóng gói tính bằng byte khi sử dụng kích thước tiêu chuẩn; Đó là, khi chuỗi định dạng bắt đầu bằng một trong

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
92,
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
93,
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
91 hoặc
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
90. Khi sử dụng kích thước gốc, kích thước của giá trị đóng gói phụ thuộc vào nền tảng.

Định dạng

Loại c

Loại Python

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
98

Kích thước tiêu chuẩn

Ghi chú

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
99

char

Byte pad

1

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
00

Không có giá trị

byte có độ dài 1

1

Đã ký char

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
01

Số nguyên

byte có độ dài 1

1

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
02

_Bool

Đã ký char

1

(1)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
03

short

byte có độ dài 1

2

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
04

Đã ký char

byte có độ dài 1

2

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
05

int

byte có độ dài 1

4

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
06

Đã ký char

byte có độ dài 1

4

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
07

long

byte có độ dài 1

4

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
08

Đã ký char

byte có độ dài 1

4

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
09

Đã ký char

byte có độ dài 1

8

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
10

Đã ký char

byte có độ dài 1

8

(2)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
11

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
12

byte có độ dài 1

(3)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
13

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
14

byte có độ dài 1

(3)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
15

(6)

float

2

(4)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
16

float

float

4

(4)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
17

double

float

8

(4)

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
18

char[]

Đã ký char

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
19

char[]

Đã ký char

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
20

void*

byte có độ dài 1

(5)

Đã ký charAdded support for the

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
21 and
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
22 formats.

Số nguyênAdded support for the

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
23 format.

Notes:

  1. (1), (2)_Bool type defined by C99. If this type is not available, it is simulated using a char. In standard mode, it is always represented by one byte.

  2. Char không dấu

    (1), (2)Added support for the

    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    21 and
    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    22 formats.Added use of the
    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    25 method for non-integers.

  3. Char không dấuAdded support for the

    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    23 format.

  4. bool_Bool type defined by C99. If this type is not available, it is simulated using a char. In standard mode, it is always represented by one byte.

  5. không dấu ngắn

  6. Int không dấuAdded use of the

    >>> pack('ci', b'*', 0x12131415)
    b'*\x00\x00\x00\x12\x13\x14\x15'
    >>> pack('ic', 0x12131415, b'*')
    b'\x12\x13\x14\x15*'
    >>> calcsize('ci')
    8
    >>> calcsize('ic')
    5
    
    25 method for non-integers.

không dấu dài

dài dài

không dấu lâu

Byte

Đã thay đổi trong phiên bản 3.3: Đã thêm hỗ trợ cho các định dạng
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
21 và
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
22.

Đã thay đổi trong phiên bản 3.6: Đã thêm hỗ trợ cho định dạng

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
23.

Mã chuyển đổi
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
24 tương ứng với loại _Bool được xác định bởi C99. Nếu loại này không có sẵn, nó được mô phỏng bằng cách sử dụng char. Trong chế độ tiêu chuẩn, nó luôn được đại diện bởi một byte.

Khi đóng gói một giá trị
>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
98 sử dụng một trong các định dạng số nguyên (

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
00,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
01,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
02,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
03,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
04,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
05,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
06,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
07,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
08,
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
09), nếu ____.

Đã thay đổi trong phiên bản 3.1: Trước đây, một số định dạng số nguyên đã kết thúc các giá trị ngoài phạm vi và tăng

Đối với ký tự định dạng

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
24, giá trị trả về là

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
22 hoặc
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
23. Khi đóng gói, giá trị sự thật của đối tượng đối số được sử dụng. 0 hoặc 1 trong biểu diễn BOOL gốc hoặc tiêu chuẩn sẽ được đóng gói và bất kỳ giá trị khác không nào sẽ là
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
22 khi giải nén.

Ví dụ;

Ghi chú

Tất cả các ví dụ giả định một thứ tự byte gốc, kích thước và sự liên kết với một máy lớn.

Một ví dụ cơ bản về đóng gói/giải nén ba số nguyên:

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
8

Các trường được giải nén có thể được đặt tên bằng cách gán chúng cho các biến hoặc bằng cách gói kết quả trong một bộ tuple có tên:

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)

Đặt hàng các ký tự định dạng có thể có tác động đến kích thước vì phần đệm cần thiết để đáp ứng các yêu cầu liên kết là khác nhau:

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5

Định dạng sau

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
25 chỉ định hai byte pad ở cuối, giả sử các độ dài được căn chỉnh trên các ranh giới 4 byte:
>>> pack('llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'

Điều này chỉ hoạt động khi kích thước và căn chỉnh gốc có hiệu lực; Kích thước và căn chỉnh tiêu chuẩn không thực thi bất kỳ sự liên kết nào.

Xem thêm

Mô -đun
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
26

Lưu trữ nhị phân đóng gói của dữ liệu đồng nhất.

Mô -đun
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
27

Đóng gói và giải nén dữ liệu XDR.

Các lớp học¶

Mô -đun

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
2 cũng xác định loại sau:

Lớp ________ 12 ________ 130 (Định dạng) ¶(format)¶(format)

Trả về một đối tượng cấu trúc mới ghi và đọc dữ liệu nhị phân theo định dạng chuỗi định dạng. Tạo một đối tượng struct một lần và gọi các phương thức của nó hiệu quả hơn so với việc gọi các hàm

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
2 có cùng định dạng vì chuỗi định dạng chỉ cần được biên dịch một lần.

Ghi chú

Tất cả các ví dụ giả định một thứ tự byte gốc, kích thước và sự liên kết với một máy lớn.

Một ví dụ cơ bản về đóng gói/giải nén ba số nguyên:

Các trường được giải nén có thể được đặt tên bằng cách gán chúng cho các biến hoặc bằng cách gói kết quả trong một bộ tuple có tên:(v1, v2, ...)

Đặt hàng các ký tự định dạng có thể có tác động đến kích thước vì phần đệm cần thiết để đáp ứng các yêu cầu liên kết là khác nhau:

Định dạng sau (buffer, offset, v1, v2, ...)

Điều này chỉ hoạt động khi kích thước và căn chỉnh gốc có hiệu lực; Kích thước và căn chỉnh tiêu chuẩn không thực thi bất kỳ sự liên kết nào.

Xem thêm(buffer)

Mô -đun

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
26

Lưu trữ nhị phân đóng gói của dữ liệu đồng nhất.(buffer, offset=0)

Mô -đun

>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
26

Lưu trữ nhị phân đóng gói của dữ liệu đồng nhất.(buffer)

Các lớp học¶

Mô -đun

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
2 cũng xác định loại sau:

Lớp ________ 12 ________ 130 (Định dạng) ¶(format)¶

Trả về một đối tượng cấu trúc mới ghi và đọc dữ liệu nhị phân theo định dạng chuỗi định dạng. Tạo một đối tượng struct một lần và gọi các phương thức của nó hiệu quả hơn so với việc gọi các hàm

>>> pack('ci', b'*', 0x12131415)
b'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, b'*')
b'\x12\x13\x14\x15*'
>>> calcsize('ci')
8
>>> calcsize('ic')
5
2 có cùng định dạng vì chuỗi định dạng chỉ cần được biên dịch một lần.

Các trường được giải nén có thể được đặt tên bằng cách gán chúng cho các biến hoặc bằng cách gói kết quả trong một bộ tuple có tên:(v1, v2, ...)¶The format string type is now

Định dạng sau
>>> record = b'raymond   \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)
25 chỉ định hai byte pad ở cuối, giả sử các độ dài được căn chỉnh trên các ranh giới 4 byte:(buffer, offset, v1, v2, ...)¶

Xem thêm(buffer)¶