Giải nén cấu trúc trong Python là gì?

Như đã thảo luận trước đó, cấu trúc trong Python thực hiện chuyển đổi các giá trị Python và cấu trúc C được biểu diễn ở dạng đối tượng byte Python

Cú pháp chung của Struct trong Python

struct.module(formatString, buffer, ...)
  • Mô-đun đề cập đến mô-đun được sử dụng để chuyển đổi giữa các cấu trúc C và giá trị Python

  • Cấu trúc trong Python sử dụng chuỗi định dạng dưới dạng mô tả nhỏ gọn về bố cục của cấu trúc C và chuyển đổi dự kiến ​​sang/từ các giá trị Python

Chuỗi định dạng là gì?

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, xác đị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

  • Bộ đệm được truyền dưới dạng đối số cho nhiều cấu trúc trong Python. Bộ đệm được sử dụng để chỉ đối tượng được sử dụng trong việc thực hiện các giao thức bộ đệm. Các đối tượng này được sử dụng để thực hiện các giao thức đệm ở dạng đọc được hoặc đọc được.

Mô-đun cấu trúc trong Python

Trong phần này, chúng ta sẽ đi qua một số mô-đun cấu trúc trong Python

cấu trúc. đóng gói()

cấu trúc. pack() mô-đun trong Python được sử dụng để trả về một đối tượng byte bao gồm các giá trị được tải dựa trên cách chuỗi định dạng

Các đối số phải khớp chính xác với các giá trị theo yêu cầu của định dạng

cú pháp

struct.pack(formatString, v1, v2, ...)

cấu trúc. giải nén()

cấu trúc. unpack() mô-đun trong Python được sử dụng để giải nén bộ đệm từ đầu tại vị trí bù theo cách chuỗi định dạng. cấu trúc. giải nén () mô-đun trả về một tuple

Kích thước của bộ đệm tính bằng byte, bắt đầu từ vị trí bù, ít nhất phải bằng kích thước theo yêu cầu của định dạng, như được phản ánh bởi calcsize()

cú pháp

struct.unpack_from(formatString, /, buffer, offset=0)

cấu trúc. vôi hóa()

cấu trúc. mô-đun calcsize() được sử dụng để trả về kích thước của cấu trúc tương ứng với cách chuỗi định dạng. cấu trúc. calcsize() có thể được sử dụng với các mô-đun như struct. giải nén_from() hoặc cấu trúc. pack_into() cần bộ đệm cũng như giá trị bù

cú pháp

cấu trúc ngoại lệ. lỗi

cấu trúc. lỗi được sử dụng để tăng ngoại lệ. Nó mô tả vấn đề với các đối số được thông qua là gì

cấu trúc. pack_into()

cấu trúc. pack_into() được sử dụng để đóng gói các giá trị theo cách chuỗi định dạng. Các giá trị được đóng gói được ghi vào bộ đệm có thể ghi ngay từ đầu ở vị trí bù

  • offset là đối số bắt buộc

cú pháp

struct.pack_into(format, buffer, offset, v1, v2, ...)

cấu trúc. giải nén_từ()

cấu trúc. unpack_from() được sử dụng để giải nén bộ đệm từ đầu tại vị trí bù theo cách chuỗi định dạng. cấu trúc. mô-đun unpack_from() trả về một tuple

Kích thước của bộ đệm tính bằng byte, bắt đầu từ vị trí bù, ít nhất phải bằng kích thước theo yêu cầu của định dạng, như được phản ánh bởi calcsize()

cú pháp

struct.unpack_from(format, /, buffer, offset=0)

Ví dụ để hiểu Mô-đun cấu trúc trong Python

Trong phần này, chúng ta sẽ đi qua một số ví dụ để hiểu các mô-đun Python

cấu trúc. đóng gói()

Trong ví dụ này, chúng ta sẽ học cách sử dụng cấu trúc trong Python để đóng gói bất kỳ dữ liệu nào thành dạng nhị phân của nó

Mã số

import struct

packed = struct.pack('i 4s f', 10, b'John', 2500)
print(packed)

đầu ra

b'\n\x00\x00\x00John\x00@\x1cE'

Giải thích ví dụ

Trong ví dụ trên, chúng tôi đang nhập mô-đun cấu trúc. Chuỗi định dạng 'i 4s f' được chuyển đến cú đánh. phương thức pack() và đối tượng byte được tải với các giá trị được lưu trữ trong biến được đóng gói. Do đó, đầu ra hiển thị b'\n\x00\x00\x00John\x00@\x1cE'

cấu trúc. giải nén()

Trong ví dụ này, chúng ta sẽ tìm hiểu cách sử dụng kiểu tấn công trong Python để giải nén bất kỳ dữ liệu nào từ dạng nhị phân của nó

Mã số

import struct

packed = b'\n\x00\x00\x00John\x00@\x1cE'
unpacked = struct.unpack('i 4s f', packed)
print(unpacked)

đầu ra

Giải thích ví dụ

Trong ví dụ trên, chúng tôi đang nhập mô-đun cấu trúc. Chuỗi định dạng 'i 4s f' được chuyển đến cú đánh. phương thức giải nén () cùng với đối tượng byte được tải với các giá trị được lưu trữ trong biến được đóng gói. cấu trúc. giải nén () đang trả về bộ được liên kết với chuỗi định dạng và các giá trị được đóng gói, do đó, đầu ra là (10, b'John', 2500. 0)

cấu trúc. vôi hóa()

Trong ví dụ này, chúng ta sẽ học cách sử dụng strike trong Python để tính toán kích thước của biểu diễn chuỗi của cấu trúc đã cho

Mã số

________số 8_______

đầu ra

Giải thích ví dụ

Trong ví dụ trên, chúng tôi đang nhập mô-đun cấu trúc. Chuỗi định dạng 'i 4s f' được chuyển đến cấu trúc. phương thức calcsize() sẽ tính toán kích thước của chuỗi định dạng. Kích thước được tính bằng byte và được lưu trữ trong biến kích thước. Do đó, đầu ra là 12 byte

cấu trúc. pack_into()

Trong ví dụ này, chúng ta sẽ học cách làm việc với phương thức pack_into() trong Python

Mã số

# importing modules struct and ctype
import struct
import ctypes

# creating string buffer of size 8
buffer_size = struct.calcsize('ii');

# Create the buffer string
Buffer = ctypes.create_string_buffer(buffer_size)

# returning the packed data
struct.pack_into('ii', Buffer,0, 1, 2)

# Displaying the contents of the buffer
print(Buffer[:])

đầu ra

struct.pack(formatString, v1, v2, ...)
0

Giải thích ví dụ

Trong ví dụ trên, đầu tiên chúng ta sẽ nhập các mô-đun struct và ctypes vì ​​ví dụ này sử dụng các hàm cần các mô-đun này. Ở đây, chúng tôi đã tạo một chuỗi kích thước bộ đệm có tên Bộ đệm có kích thước 11 và chúng tôi đang nhận các giá trị được đóng gói của mình trong chuỗi bộ đệm. Chuỗi đệm khi được truyền vào cấu trúc. phương thức pack_into() cùng với các tham số khác sẽ trả về dữ liệu được đóng gói

Sự khác biệt giữa gói cấu trúc và giải nén trong Python là gì?

pack nhận các giá trị không phải byte (e. g. số nguyên, chuỗi, v.v. ) và chuyển đổi chúng thành byte. Và ngược lại, cấu trúc. giải nén lấy byte và chuyển đổi chúng thành giá trị tương đương 'bậc cao hơn' .

Python định nghĩa cấu trúc là gì?

Các cấu trúc được xác định bằng cách sử dụng một ngôn ngữ nhỏ dựa trên các chuỗi định dạng cho phép bạn xác định cách sắp xếp của các loại dữ liệu C khác nhau như char , int và long cũng như các biến thể không dấu của chúng . Các cấu trúc nối tiếp hiếm khi được sử dụng để biểu diễn các đối tượng dữ liệu được xử lý hoàn toàn bên trong mã Python. . Serialized structs are seldom used to represent data objects meant to be handled purely inside Python code.

Mô-đun cấu trúc Python là gì?

Cấu trúc mô-đun được sử dụng để chuyển đổi các kiểu dữ liệu gốc của Python thành chuỗi byte và ngược lại . Chúng tôi không phải cài đặt nó. Đó là một mô-đun tích hợp có sẵn trong Python3. Mô-đun cấu trúc có liên quan đến ngôn ngữ C.

Có cấu trúc Python không?

Cấu trúc Python là một công cụ thiết thực để quản lý và lưu trữ dữ liệu byte thô . Mô-đun cấu trúc cho phép tạo các kiểu dữ liệu nhị phân nhỏ gọn được sử dụng trong ngôn ngữ lập trình C.