मैं पायथन में हेक्स से सादे ASCII में कैसे परिवर्तित कर सकता हूं?
ध्यान दें कि, उदाहरण के लिए, मैं "0x7061756c" को "पाउल" में बदलना चाहता हूं।
मैं पायथन में हेक्स से सादे ASCII में कैसे परिवर्तित कर सकता हूं?
ध्यान दें कि, उदाहरण के लिए, मैं "0x7061756c" को "पाउल" में बदलना चाहता हूं।
जवाबों:
थोड़ा सरल समाधान:
>>> "7061756c".decode("hex")
'paul'
codecs.decode("7061756c", "hex")
पायथन 2 और पायथन 3 के लिए काम करता है। लेकिन यह bytes()
पायथन 3 में एक स्ट्रिंग देता है। लेकिन यह एक ASCII स्ट्रिंग के लिए उचित है।
किसी भी पुस्तकालय को आयात करने की आवश्यकता नहीं है:
>>> bytearray.fromhex("7061756c").decode()
'paul'
bytearray.fromhex("70 61 75 6C").decode()
'latin-1'
करने से किसी भी त्रुटि से छुटकारा मिल जाएगा, लेकिन अगर पाठ वास्तव में लैटिन -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
Python 3.3.2 में परीक्षण किया गया, इसे पूरा करने के कई तरीके हैं, यहाँ पर सबसे छोटा है, केवल अजगर द्वारा प्रदत्त सामान का उपयोग करना:
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)