الدرس 2 من 9
التمثيل الست عشري
- 12 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
البايت رمزان ست عشريان
الشرح
النظام الست عشري (hexadecimal) يكتب العدد بستة عشر رمزًا: الأرقام من 0 إلى 9 ثم الحروف من a إلى f. وتدلّ عليه في Python البادئة 0x، فالعدد 0xff هو 255. ولأن كل رمز ست عشري يمثّل أربعة بتات بالضبط، يُكتب البايت دائمًا برمزين من 00 إلى ff، ولهذا يقرأ أهل الهندسة العكسية البايتات بهذه الصورة.
وللتحويل في Python أدوات جاهزة. فالطريقة data.hex(" ") تعرض البايتات وتفصل بينها بمسافة، والدالة bytes.fromhex("ff 00") تعكسها وتتجاهل المسافات، والدالة format(26, "02x") تكتب عددًا واحدًا برمزين فتعطي "1a". أمّا العدد المكوَّن من عدّة بايتات فتقرؤه الدالة int.from_bytes.
وأشهر ما ستراه من هذا التفريغ الست عشري (hexdump). في كل سطر منه عنوان البداية، ثم ستة عشر بايتًا، ثم تمثيلها نصًّا بين خطّين عموديّين، والنقطة فيه مكان كل بايت لا يُطبع:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
المطلوب
اكتب الدالة to_hex(data) لتُرجع البايتات نصًّا ست عشريًّا بمسافة بين كل بايتين مثل "ff 00 1a"، والدالة from_hex(text) لتعكسها فتُرجع bytes. ثم احسب في value قيمة البايتين bytes([0x12, 0x34]) عددًا صحيحًا بالدالة int.from_bytes وبالترتيب "big"، وسترى معنى هذا الترتيب في الدرس التالي.
الفحوص
5 فحوص- الدالة to_hex تفصل البايتات بمسافة
- الدالة to_hex تكتب البايت الصغير برمزين
- الدالة from_hex تعكس to_hex
- الدالة from_hex تتجاهل المسافات وتُرجع bytes
- قيمة البايتين في value صحيحة