في هذه المقالة، ستتعلم كيفية تحويل قيم HEX إلى سلسلة ASCII في Python.
ولجعل الأمر أكثر متعة، لدينا السيناريو التالي:
قررت شركة Carrier Coders عرض اقتباس اليوم على موقعها الإلكتروني. يتم إرسال كل اقتباس يوميًا بقيم HEX. تتمثل مهمتك في تحويل الاقتباس إلى سلسلة ASCII وتنسيق الناتج.
 السؤال: كيف نكتب كود بايثون لإجراء التحويل وعرض الاقتباس عشوائيًا؟
يمكننا إنجاز هذه المهمة من خلال أحد الخيارات التالية:
- الطريقة 1: استخدام fromhex()وdecode()
- الطريقة 2: استخدم codecs.decode()
- الطريقة 3: استخدم join()
- الطريقة 4: استخدم binascii.a2b_hex()
- المكافأة: إنشاء اقتباس عشوائي
أضف الكود التالي إلى أعلى كل مقتطف من الكود. سيسمح هذا المقتطف للكود الموجود في هذه المقالة بالعمل دون أخطاء.
| 1 2 3 | import codecsimport binasciiimport 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 معلومات كافية لاختيار الطريقة الأفضل لمتطلبات الترميز الخاصة بك.
 
 
 
ليست هناك تعليقات:
إرسال تعليق