struct --- حزم وفك حزم أنواع البيانات البدائية¶
تجري هذه الوحدة تحويلات بين قيم Python وبُنى بأسلوب C ممثَّلة على شكل كائنات bytes في Python، باستخدام سلاسل التنسيق لوصف تخطيط البيانات.
تُدعم ترتيبات البايتات التالية:
الحرف |
ترتيب البايتات |
الحجم |
المحاذاة |
|---|---|---|---|
@ |
أصلي |
أصلي |
أصلي |
< |
صغير الترتيب (little-endian) |
معياري |
لا شيء |
> |
كبير الترتيب (big-endian) |
معياري |
لا شيء |
! |
الشبكة (= كبير الترتيب) |
معياري |
لا شيء |
تُدعم أنواع البيانات التالية:
التنسيق |
نوع C |
نوع Python |
الحجم المعياري |
|---|---|---|---|
b |
signed char |
عدد صحيح |
1 |
B |
unsigned char |
عدد صحيح |
1 |
h |
short |
عدد صحيح |
2 |
H |
unsigned short |
عدد صحيح |
2 |
i |
int |
عدد صحيح (1) |
4 |
I |
unsigned int |
عدد صحيح (1) |
4 |
l |
long |
عدد صحيح (1) |
4 |
L |
unsigned long |
عدد صحيح (1) |
4 |
q |
long long |
عدد صحيح (1) |
8 |
Q |
unsigned long long |
عدد صحيح (1) |
8 |
e |
غير متاح (نصف عائم) |
float (2) |
2 |
f |
float |
float (2) |
4 |
d |
double |
float (2) |
8 |
s |
char[] |
bytes |
|
P |
void * |
عدد صحيح |
يتطلب دعم long عند الاستخدام مع قيم أكبر من 30 بت.
يتطلب دعم الفاصلة العائمة.
الفرق عن CPython
لا تُدعم المسافات البيضاء في سلاسل التنسيق.
أمثلة¶
حزم وفك حزم قيم صغيرة الترتيب. تختار البادئة < ترتيب البايتات صغير الترتيب بأحجام معيارية ودون محاذاة:
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
الحزم في مخزن مؤقت موجود وفك الحزم منه عند إزاحة بايتية:
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,)
الدوال¶
- struct.pack(fmt: str, *values: Any) bytes¶
يحزم الـ values وفقاً لسلسلة التنسيق fmt. القيمة المُرجَعة هي كائن bytes يرمّز القيم.
- struct.pack_into(fmt: str, buffer: Any, offset: int, *values: Any) None¶
يحزم الـ values وفقاً لسلسلة التنسيق fmt في buffer بدءاً من offset. يمكن أن يكون offset سالباً للعد من نهاية buffer.