تقنية

pack_into في بايثون: هل يضيف بايتات إلى البافر؟

كتابة >H عند الإزاحة 2 تبقي طول المثال 6 بايتات.
الطول ثابت بعد الكتابة.

pack_into تكتب في بافر قابل للكتابة عند الإزاحة المطلوبة. [1]

الخلاصة السريعة

لا؛ تستبدل البايتات في موضعها في مثالنا. [1]

  • pack_into تكتب في بافر قابل للكتابة عند الإزاحة المطلوبة. [1]
  • الصيغة >H تكتب بايتين لعدد غير موقّع، والبايت الأعلى أولًا. [1]
  • على CPython 3.12.14، نكتب 0x1234 عند الإزاحة 2 في buf بطول 6. [1]
  • البايتات بالست عشري: 41 42 12 34 45 46؛ الطول 6، والنتيجة None؛ تبقى البداية والنهاية. [1]
  • تحكم: تركيب البايتات مستقلًا يطابق الناتج؛ الإزاحة 5 ترفع struct.error دون تغيير البافر أو توسعته. [1]

كتابة عند موضع

pack_into تكتب في بافر قابل للكتابة عند الإزاحة المطلوبة. [1]

حجم الكتابة

الصيغة >H تكتب بايتين لعدد غير موقّع، والبايت الأعلى أولًا. [1]

بايتان وسط البافر

على CPython 3.12.14، نكتب 0x1234 عند الإزاحة 2 في buf بطول 6. [1]

import struct buf=bytearray(b"ABCDEF") result=struct.pack_into(">H",buf,2,0x1234) print(buf.hex(),len(buf),result) [1]

12 و34 بالست عشري يحلان وسط البافر.
بايتان مستبدلان وسط البافر.

الاستبدال والتحكم

البايتات بالست عشري: 41 42 12 34 45 46؛ الطول 6، والنتيجة None؛ تبقى البداية والنهاية. [1]

try: struct.pack_into(">H",buf,5,0x1234) except struct.error: print("struct.error") [1]

تحكم: تركيب البايتات مستقلًا يطابق الناتج؛ الإزاحة 5 ترفع struct.error دون تغيير البافر أو توسعته. [1]

المراجع

  1. Python struct

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.