struct — împachetarea și despachetarea tipurilor de date primitive

Acest modul efectuează conversii între valori Python și structuri în stil C reprezentate ca obiecte bytes Python, folosind șiruri de format pentru a descrie dispunerea datelor.

Sunt acceptate următoarele ordini de octeți:

Caracter

Ordinea octeților

Dimensiune

Aliniere

@

nativ

nativ

nativ

<

little-endian

standard

niciuna

>

big-endian

standard

niciuna

!

rețea (= big-endian)

standard

niciuna

Sunt acceptate următoarele tipuri de date:

Format

Tip C

Tip Python

Dimensiune standard

b

signed char

întreg

1

B

unsigned char

întreg

1

h

short

întreg

2

H

unsigned short

întreg

2

i

int

întreg (1)

4

I

unsigned int

întreg (1)

4

l

long

întreg (1)

4

L

unsigned long

întreg (1)

4

q

long long

întreg (1)

8

Q

unsigned long long

întreg (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 *

întreg

  1. Necesită suport pentru long atunci când este folosit cu valori mai mari de 30 de biți.

  2. Necesită suport pentru virgulă mobilă.

Diferență față de CPython

Spațiile albe nu sunt acceptate în șirurile de format.

Exemple

Împachetarea și despachetarea valorilor little-endian. Prefixul < selectează ordinea octeților little-endian cu dimensiuni standard și fără aliniere:

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

Împachetarea într-un tampon existent și despachetarea din acesta la un deplasament de octet:

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,)

Funcții

struct.calcsize(fmt: str) int

Returnează numărul de octeți necesari pentru a stoca fmt-ul dat.

struct.pack(fmt: str, *values: Any) bytes

Împachetează values conform șirului de format fmt. Valoarea returnată este un obiect bytes care codifică valorile.

struct.pack_into(fmt: str, buffer: Any, offset: int, *values: Any) None

Împachetează values conform șirului de format fmt într-un buffer, începând de la offset. offset poate fi negativ pentru a număra de la sfârșitul lui buffer.

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

Despachetează din data conform șirului de format fmt. Valoarea returnată este un tuplu al valorilor despachetate.

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

Despachetează din data, începând de la offset, conform șirului de format fmt. offset poate fi negativ pentru a număra de la sfârșitul lui data. Valoarea returnată este un tuplu al valorilor despachetate.