الخلاصة السريعة
unpack يحتاج الحجم المطابق؛ unpack_from يحتاج بايتات كافية بدءًا من الإزاحة. [1] [2]
- >H عدد صحيح غير موقّع، ببايتين؛ البايت الأعلى أولًا. [1] [2]
- البافر 00 07 00 0a أربعة بايتات؛ unpack(">H",b) يرفع struct.error. [1] [2]
- unpack_from عند 0 يعطي (7,)؛ وعند 2 يعطي (10,). [1] [2]
- الإزاحة بالبايت: عند 1 نحصل على (1792,)، وليس السجل التالي. [1] [2]
- عند 3 يبقى بايت واحد؛ struct.error. جربنا 3.12.14 وإزاحات غير سالبة. [1] [2]
المثال
import struct
b=bytes.fromhex("00 07 00 0a")
for offset in (0,1,2):
print(offset,struct.unpack_from(">H",b,offset))الناتج: 0 (7,)؛ 1 (1792,)؛ 2 (10,). [1] [2]
الحجم
calcsize(">H")=2؛ أربعة بايتات تفشل مع unpack. القراءة الجزئية تختار موضعًا يترك بايتين على الأقل. [1] [2]
الإزاحة
الإزاحة بالبايت من الصفر. عند 1 نقرأ 07 00؛ 7*256=1792. السجل التالي هنا يبدأ عند 2، لا 1. [1] [2]

النطاق
عند 3 يبقى 0a وحده؛ يفشل unpack_from. بافر ثابت وصيغة معلنة؛ لم نفك بروتوكولًا مجهولًا. [1] [2]
المراجع
- Python: struct
- CPython 3.12.14: فحص البافر
- موضوع تك: لغة بايثون — مفردات
- موضوع تك: تطبيقات بايثون — مفردات
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
