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 |
Memerlukan dukungan long saat digunakan dengan nilai lebih besar dari 30 bit.
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.