بسم الله الرحمن الرحيم
تستخدم المكتبة ctypes لأنشاء بنية بيانات مشابه للتي في لغة C كما في هذه البنية التي سنستخدمها في المثال :
from ctypes import *
class A(Structure):
_fileds_=[("x",c_int16),
("y",c_int16)]و هذه حزمة البيانات "raw data" التي سنقوم بنقلها ألى بنية البيانات و هي عبارة عن سلسة نصية مكتوبة بواسطة محارف Hex
packet="\x02\x01\x00\xf0"
لنقل البيانات من نوع string ألى البنية A يجب أن نستخدم الأمر memmove كالتالي:
a=A() memmove(addressof(a),packet,sizeof(a))
الأن تم نقل القيم كالتالي ألى البنية "Structure" و لكي تتأكد من القيم قم بأستدعاء القيمتين x و y يجب أن يكون مساويتين لتالي:
>>> a.x 258 >>> a.y -4096
و لقيام بالعملية بطريقة عكسية أي الحصول على سلسة نصية من بنية برمجية سنستخدم الأمر string_at كالتالي:
string_at(addressof(a),sizeof(a))
هذه الطريقة مفيدة في حالة التعامل مع الملفات الثنائية "Binary" و برمجة الشبكات و بخاصة برمجة Raw_socket :cool: