Modul struct --- pack dan unpack tipe data primitif

Modul ini melakukan konversi antara nilai Python dan struct bergaya C yang direpresentasikan sebagai objek bytes Python, menggunakan string format untuk mendeskripsikan tata letak data.

Urutan byte berikut didukung:

Karakter

Urutan byte

Ukuran

Penyelarasan

@

native

native

native

<

little-endian

standard

none

>

big-endian

standard

none

!

network (= big-endian)

standard

none

Tipe data berikut didukung:

Format

Tipe C

Tipe Python

Ukuran standar

b

signed char

integer

1

B

unsigned char

integer

1

h

short

integer

2

H

unsigned short

integer

2

i

int

integer (1)

4

I

unsigned int

integer (1)

4

l

long

integer (1)

4

L

unsigned long

integer (1)

4

q

long long

integer (1)

8

Q

unsigned long long

integer (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 *

integer

  1. Memerlukan dukungan long saat digunakan dengan nilai lebih besar dari 30 bit.

  2. Memerlukan dukungan floating point.

Perbedaan dengan CPython

Spasi tidak didukung dalam string format.

Contoh

Pack dan unpack nilai little-endian. Awalan < memilih urutan byte little-endian dengan ukuran standar dan tanpa penyelarasan:

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

Pack ke dalam dan unpack dari buffer yang sudah ada pada offset byte:

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

Fungsi

struct.calcsize(fmt: str) int

Mengembalikan jumlah byte yang diperlukan untuk menyimpan fmt yang diberikan.

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

Pack values sesuai string format fmt. Nilai kembalian adalah objek bytes yang mengkodekan nilai-nilai tersebut.

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

Pack values sesuai string format fmt ke dalam buffer dimulai dari offset. offset dapat negatif untuk menghitung dari akhir buffer.

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

Unpack dari data sesuai string format fmt. Nilai kembalian adalah tuple dari nilai-nilai yang telah di-unpack.

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

Unpack dari data dimulai dari offset sesuai string format fmt. offset dapat negatif untuk menghitung dari akhir data. Nilai kembalian adalah tuple dari nilai-nilai yang telah di-unpack.