struct — packa och packa upp primitiva datatyper

Denna modul utför konverteringar mellan Python-värden och C-liknande structar representerade som Python-bytes-objekt, med hjälp av formatsträngar som beskriver datans layout.

Följande byteordningar stöds:

Tecken

Byteordning

Storlek

Justering

@

inhemsk

inhemsk

inhemsk

<

little-endian

standard

ingen

>

big-endian

standard

ingen

!

nätverk (= big-endian)

standard

ingen

Följande datatyper stöds:

Format

C-typ

Python-typ

Standardstorlek

b

signed char

heltal

1

B

unsigned char

heltal

1

h

short

heltal

2

H

unsigned short

heltal

2

i

int

heltal (1)

4

I

unsigned int

heltal (1)

4

l

long

heltal (1)

4

L

unsigned long

heltal (1)

4

q

long long

heltal (1)

8

Q

unsigned long long

heltal (1)

8

e

ej tillämpligt (half-float)

float (2)

2

f

float

float (2)

4

d

double

float (2)

8

s

char[]

bytes

P

void *

heltal

  1. Kräver stöd för long när det används med värden större än 30 bitar.

  2. Kräver stöd för flyttal.

Skillnad mot CPython

Blanksteg stöds inte i formatsträngar.

Exempel

Packa och packa upp little-endian-värden. Prefixet < väljer little-endian byteordning med standardstorlekar och ingen justering:

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

Packa in i och packa upp från en befintlig buffert vid en byteoffset:

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

Funktioner

struct.calcsize(fmt: str) int

Returnerar antalet byte som behövs för att lagra det angivna fmt.

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

Packa values enligt formatsträngen fmt. Returvärdet är ett bytes-objekt som kodar värdena.

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

Packa values enligt formatsträngen fmt in i en buffer med start vid offset. offset kan vara negativ för att räkna från slutet av buffer.

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

Packa upp från data enligt formatsträngen fmt. Returvärdet är en tuppel av de uppackade värdena.

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

Packa upp från data med start vid offset enligt formatsträngen fmt. offset kan vara negativ för att räkna från slutet av data. Returvärdet är en tuppel av de uppackade värdena.