আমি কীভাবে পাইথনের হেক্স থেকে প্লেইন এএসসিআই তে রূপান্তর করতে পারি?
নোট করুন, উদাহরণস্বরূপ, আমি "0x7061756c" "পল" এ রূপান্তর করতে চাই।
আমি কীভাবে পাইথনের হেক্স থেকে প্লেইন এএসসিআই তে রূপান্তর করতে পারি?
নোট করুন, উদাহরণস্বরূপ, আমি "0x7061756c" "পল" এ রূপান্তর করতে চাই।
উত্তর:
একটি সামান্য সহজ সমাধান:
>>> "7061756c".decode("hex")
'paul'
.decode('hex')
উপর পাইথন 3. .decode('hex')
ব্যবহারসমূহ binascii.unhexlify()
পাইথন 2 ।
codecs.decode("7061756c", "hex")
পাইথন 2 এবং পাইথন 3 এর জন্য কাজ করে তবে এটি bytes()
পাইথন 3 এ স্ট্রিং দেয় But তবে এটি ASCII স্ট্রিংয়ের পক্ষে যুক্তিসঙ্গত।
কোনও লাইব্রেরি আমদানি করার দরকার নেই:
>>> bytearray.fromhex("7061756c").decode()
'paul'
bytearray.fromhex("70 61 75 6C").decode()
'latin-1'
যে কোনও ত্রুটি থেকে মুক্তি পাবে তবে পাঠ্যটি ল্যাটিন -১ এ না থাকলে সম্পূর্ণ জিব্বারিশ ভালভাবে তৈরি করতে পারে।
>>> txt = '7061756c'
>>> ''.join([chr(int(''.join(c), 16)) for c in zip(txt[0::2],txt[1::2])])
'paul'
আমি শুধু মজা করছি, তবে গুরুত্বপূর্ণ অংশগুলি হ'ল:
>>> int('0a',16) # parse hex
10
>>> ''.join(['a', 'b']) # join characters
'ab'
>>> 'abcd'[0::2] # alternates
'ac'
>>> zip('abc', '123') # pair up
[('a', '1'), ('b', '2'), ('c', '3')]
>>> chr(32) # ascii to character
' '
এখন বিনাসেই তাকিয়ে থাকবে ...
>>> print binascii.unhexlify('7061756c')
paul
শীতল (এবং অন্যান্য লোকেরা কেন সাহায্য করার আগে আপনাকে হুফ দিয়ে ঝাঁপিয়ে পড়তে চায় তা আমার কোনও ধারণা নেই)।
হেক্স সংখ্যার সাথে কাজ করার সময় হেক্স স্ট্রিংয়ের সাথে কাজ করার সময় আমার সমাধানটি এখানে নয়:
def convert_hex_to_ascii(h):
chars_in_reverse = []
while h != 0x0:
chars_in_reverse.append(chr(h & 0xFF))
h = h >> 8
chars_in_reverse.reverse()
return ''.join(chars_in_reverse)
print convert_hex_to_ascii(0x7061756c)
print convert_hex_to_ascii(123456)
।
বিকল্পভাবে, আপনি এটিও করতে পারেন ...
পাইথন 2 দোভাষী
print "\x70 \x61 \x75 \x6c"
উদাহরণ
user@linux:~# python
Python 2.7.14+ (default, Mar 13 2018, 15:23:44)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "\x70 \x61 \x75 \x6c"
p a u l
>>> exit()
user@linux:~#
অথবা
পাইথন 2 ওয়ান-লাইনার
python -c 'print "\x70 \x61 \x75 \x6c"'
উদাহরণ
user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~#
পাইথন 3 দোভাষী
user@linux:~$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("\x70 \x61 \x75 \x6c")
p a u l
>>> print("\x70\x61\x75\x6c")
paul
পাইথন 3 ওয়ান-লাইনার
python -c 'print("\x70 \x61 \x75 \x6c")'
উদাহরণ
user@linux:~$ python -c 'print("\x70 \x61 \x75 \x6c")'
p a u l
user@linux:~$ python -c 'print("\x70\x61\x75\x6c")'
paul
পাইথন ৩.৩.২ এ পরীক্ষিত এটি সম্পন্ন করার জন্য অনেকগুলি উপায় রয়েছে, এখানে কেবলমাত্র পাইথন-সরবরাহিত সামগ্রী ব্যবহার করে সংক্ষিপ্ততম একটি here
import base64
hex_data ='57696C6C20796F7520636F6E76657274207468697320484558205468696E6720696E746F20415343494920666F72206D653F2E202E202E202E506C656565656173652E2E2E212121'
ascii_string = str(base64.b16decode(hex_data))[2:-1]
print (ascii_string)
অবশ্যই, আপনি যদি কিছু আমদানি করতে না চান তবে আপনি সর্বদা নিজের কোডটি লিখতে পারেন। এর মতো খুব প্রাথমিক কিছু:
ascii_string = ''
x = 0
y = 2
l = len(hex_data)
while y <= l:
ascii_string += chr(int(hex_data[x:y], 16))
x += 2
y += 2
print (ascii_string)