في هذه المقالة، ستتعلم كيفية تحويل قيم HEX إلى سلسلة ASCII في Python.
ولجعل الأمر أكثر متعة، لدينا السيناريو التالي:
قررت شركة Carrier Coders عرض اقتباس اليوم على موقعها الإلكتروني. يتم إرسال كل اقتباس يوميًا بقيم HEX. تتمثل مهمتك في تحويل الاقتباس إلى سلسلة ASCII وتنسيق الناتج.
السؤال: كيف نكتب كود بايثون لإجراء التحويل وعرض الاقتباس عشوائيًا؟
يمكننا إنجاز هذه المهمة من خلال أحد الخيارات التالية:
- الطريقة 1: استخدام
fromhex()
وdecode()
- الطريقة 2: استخدم
codecs.decode()
- الطريقة 3: استخدم
join()
- الطريقة 4: استخدم
binascii.a2b_hex()
- المكافأة: إنشاء اقتباس عشوائي
أضف الكود التالي إلى أعلى كل مقتطف من الكود. سيسمح هذا المقتطف للكود الموجود في هذه المقالة بالعمل دون أخطاء.
1 2 3 | import codecs import binascii import random |
الطريقة 1: استخدام ()fromhex و ()decode
تعمل الدالتان fromhex()
وdecode()
بشكل جيد لتحويل قيم HEX إلى سلسلة ASCII. ولا تتطلب هذه الطريقة أي مكتبات إضافية.
1 2 3 4 | quote_h = "4368616e67696e67206a6f62732064756520746f20636f2d776f726b6572733f205768793f205468652073616d652070656f706c6520776f726b2074686572652e3b57616c6c79204d6f6f7265" quote_a = bytes.fromhex(quote_h).decode("ASCII") quote = quote_a.replace(';', '\n- ') print(quote) |
يأخذ الكود المميز قيم HEX، ويحولها إلى كائن بايت باستخدام fromhex()
، ثم يحولها إلى سلسلة ASCII عن طريق إضافة decode()
إلى النهاية. إذا تم إخراج quote_a إلى الطرفية، فسيتم عرض ما يلي:
1 | Changing jobs due to co-workers? Why? The same people work there.;Wally Moore |
لتنظيف الناتج، يتم استخدام replace()
في quote_a
لاستبدال الفاصلة المنقوطة بسطر جديد وواصلة. يتم حفظ النتيجة في quote_a
.
الناتج
1 2 | Changing jobs due to co-workers? Why? The same people work there. - Wally Moore |
الطريقة 2: استخدم ()codecs.decode
يتطلب هذا السطر الواحد مكتبة برامج codecs
للتحويل، والتي تحتوي على فئات أساسية لترميز وفك تشفير البيانات. تُستخدم عادةً في الملفات النصية المبنية على Unicode.
1 2 3 4 | quote_h = "4d7920736f667477617265206e657665722068617320627567732e204974206a75737420646576656c6f70732072616e646f6d2066656174757265732e3b416e6f6e796d6f7573" quote_a = codecs.decode(quote_h, 'hex').decode("ASCII") quote = quote_a.replace(';', '\n- ') print(quote) |
يأخذ الكود المميز قيم HEX ويحولها إلى كائن بايت باستخدام codecs.decode()
، ثم يحولها إلى سلسلة ASCII عن طريق إلحاق decode()
في النهاية.
إذا تم إخراج quote_a
إلى الطرفية، فسيتم عرض ما يلي:
1 | b'My software never has bugs. It just develops random features.;Anonymous' |
لتنظيف الناتج، يتم استخدام replace()
في quote_a
لاستبدال الفاصلة المنقوطة بسطر جديد وواصلة. يتم حفظ النتيجة في الاقتباس.
الناتج
1 2 | My software never has bugs. It just develops random features. - Anonymous |
الطريقة 3: استخدم ()join
يقوم سطر واحد فعال يقرأ قيمة HEX واحدة في كل مرة بتحويلها إلى حرف ASCII وإضافتها إلى نهاية المتغير. يتكرر هذا حتى اكتمال التحويل.
1 2 3 | quote_h = "4c696665206973206e6f742061626f75742066696e64696e6720796f757273656c662e204c6966652069732061626f7574206372656174696e6720796f757273656c662e3b47656f726765204265726e6172642053686177" quote = ''.join([chr(int(''.join(c), 16)) for c in zip(quote_h[0::2],quote_h[1::2])]).replace(';', '\n- ') print(quote) |
يأخذ الكود المميز قيمة HEX واحدة، وباستخدام zip()
، يحول القيمة المذكورة إلى ما يعادلها من ASCII. ثم يتم إلحاق الأحرف بمتغير الاقتباس لإنشاء سلسلة ASCII كاملة. وأخيرًا، يتم إلحاق replace()
في النهاية لإجراء التنسيق.
الناتج
1 2 | Life is not about finding yourself. Life is about creating yourself. - George Bernard Shaw |
الطريقة 4: استخدم binascii.a2b_hex
يستدعي هذا السطر الواحد مكتبة binascii لتحويل قيم HEX إلى سلسلة ASCII باستخدام دالة binascii.a2b_hex()
.
1 2 3 | quote_h = "446f206e6f74207365656b206120706c61636520746f20626c6f6f6d3a20626c6f6f6d20776865726520796f752061726520706c616e7465642e3b57616c6c79204d6f6f7265" quote = binascii.a2b_hex("%s" % (quote_h.strip())).decode("ASCII").replace(';', '\n- ') print(quote) |
يأخذ الكود المميز قيم HEX ويحولها إلى ما يعادلها بصيغة ASCII. وأخيرًا، يتم إلحاق replace()
في النهاية لإجراء التنسيق.
الناتج
1 2 | Do not seek a place to bloom: bloom where you are planted. - Wally Moore |
المكافأة: إنشاء اقتباس عشوائي
قد يكون النهج الأكثر فعالية للتعامل مع ما سبق هو وضع كل الاقتباسات في ملف نصي مسطح. ثم تحديد الاقتباس اليومي بشكل عشوائي وتحويله وتنسيقه بالشكل المناسب.
1 2 3 4 5 6 7 8 9 10 | quotes = [] with open('hex-quotes.txt','r') as fp: for index, line in enumerate(fp): line = bytes.fromhex(line).decode("ASCII").strip() quotes.append(line) num = random.randint(0, len(quotes)-1) daily = quotes[num].replace(';', '\n- ') print(daily) |
يتكرر الكود أعلاه عبر أسطر ملف الاقتباسات. أولاً، يتم تحويل كل سطر من قيم HEX إلى ما يعادله من سلسلة ASCII باستخدام fromhex()
وdecode()
. بعد ذلك، يتم إلحاق السلسلة المحولة بقائمة الاقتباسات.
يتم إنشاء رقم عشوائي والإشارة إليه في قائمة الاقتباسات. وأخيرًا، يتم تنسيق الناتج وإرساله إلى الطرفية.
الناتج
1 2 | Life is like a box of chocolates, you never know what you are going to get. - Forrest Gump
|
يجب أن توفر لك هذه الطرق الأربع (4) لتحويل قيم HEX إلى سلسلة ASCII معلومات كافية لاختيار الطريقة الأفضل لمتطلبات الترميز الخاصة بك.
ليست هناك تعليقات:
إرسال تعليق