تقنية

struct في بايثون: هل تعني = و@ التخطيط نفسه؟

@bI في مثال Windows AMD64: ثمانية بايتات.
ثمانية بايتات محليًا.

@ و= يتبعان ترتيب بايتات الجهاز؛ قواعد الحجم والمحاذاة تختلف. [1]

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

ليس بالضرورة؛ ترتيب البايتات وحده لا يحدد التخطيط. [1]

  • @ و= يتبعان ترتيب بايتات الجهاز؛ قواعد الحجم والمحاذاة تختلف. [1]
  • b عدد موقّع ببايت؛ I غير موقّع؛ @ حجم ومحاذاة محليان؛ = أحجام قياسية بلا محاذاة. [1]
  • CPython 3.12.14 على Windows AMD64: @bI للقيمتين 9 و0x11223344 ينتج 8 بايتات. [1]
  • =bI يعطي 5 بايتات؛ @bI أضاف 3 صفريات بعد البايت الأول للمحاذاة في بيئتنا. [1]
  • تحكم: بايتات مؤلفة وحساب مستقل يطابقان الحزم؛ فك كل حزمة بصيغتها يعيد القيمتين؛ النتائج المحلية ليست وعدًا لكل منصة. [1]

ترتيب بايتات الجهاز

@ و= يتبعان ترتيب بايتات الجهاز؛ قواعد الحجم والمحاذاة تختلف. [1]

المحاذاة والحجم

b عدد موقّع ببايت؛ I غير موقّع؛ @ حجم ومحاذاة محليان؛ = أحجام قياسية بلا محاذاة. [1]

التخطيط المحلي

CPython 3.12.14 على Windows AMD64: @bI للقيمتين 9 و0x11223344 ينتج 8 بايتات. [1]

import struct values=(9,0x11223344) native=struct.pack("@bI",*values) print(native.hex(),len(native)) [1]

=bI في مثال Windows AMD64: خمسة بايتات.
خمسة بايتات قياسيًا.

بلا حشو والتحكم

=bI يعطي 5 بايتات؛ @bI أضاف 3 صفريات بعد البايت الأول للمحاذاة في بيئتنا. [1]

standard=struct.pack("=bI",*values) print(standard.hex(),len(standard)) print(struct.unpack("@bI",native)) print(struct.unpack("=bI",standard)) [1]

تحكم: بايتات مؤلفة وحساب مستقل يطابقان الحزم؛ فك كل حزمة بصيغتها يعيد القيمتين؛ النتائج المحلية ليست وعدًا لكل منصة. [1]

المراجع

  1. Python struct

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

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