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 |
Necesită suport pentru long atunci când este folosit cu valori mai mari de 30 de biți.
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.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.