تقنية

struct في بايثون: هل يعيد 300p أكثر من 255 بايتًا؟

300p: مدخل 280 بايتًا يعطي ناتجًا مفكوكًا بطول 255.
حقل 300؛ الناتج 255 بايتًا.

صيغة p تبدأ ببايت طول، سقفه 255؛ الناتج المفكوك لا يتجاوز 255 بايتًا. [1]

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

لا؛ زيادة حجم الحقل لا ترفع هذا الحد. [1]

  • صيغة p تبدأ ببايت طول، سقفه 255؛ الناتج المفكوك لا يتجاوز 255 بايتًا. [1]
  • 300p حجم الحقل كله 300 بايت، وليس وعدًا بإعادة 300 بايت بيانات. [1]
  • على CPython 3.12.14، raw=b"x"*280؛ حزمة 300p طولها 300؛ بايت الطول 255. [1]
  • فكها يعيد 255 بايتًا كلها x؛ 400p يعيد 255 أيضًا. [1]
  • تحكم: مدخل 255 بايتًا يعود كما هو؛ تركيب الحزم مستقلًا مطابق؛ يبقى raw بطول 280. [1]

بايت الطول

صيغة p تبدأ ببايت طول، سقفه 255؛ الناتج المفكوك لا يتجاوز 255 بايتًا. [1]

حجم الحقل

300p حجم الحقل كله 300 بايت، وليس وعدًا بإعادة 300 بايت بيانات. [1]

مدخل أطول

على CPython 3.12.14، raw=b"x"*280؛ حزمة 300p طولها 300؛ بايت الطول 255. [1]

import struct raw=b"x"*280 packet=struct.pack("300p",raw) print(len(packet),packet[0],len(struct.unpack("300p",packet)[0])) [1]

400p: المدخل نفسه يعطي ناتجًا مفكوكًا بطول 255.
حقل 400؛ الناتج 255 بايتًا.

الحد والتحكم

فكها يعيد 255 بايتًا كلها x؛ 400p يعيد 255 أيضًا. [1]

larger=struct.pack("400p",raw) print(len(larger),len(struct.unpack("400p",larger)[0])) control=b"x"*255 print(struct.unpack("300p",struct.pack("300p",control))[0]==control) [1]

تحكم: مدخل 255 بايتًا يعود كما هو؛ تركيب الحزم مستقلًا مطابق؛ يبقى raw بطول 280. [1]

المراجع

  1. Python struct

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

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