Лучшее решение для меня (работает с python 3), так как оно принимает пробелы:bytearray.fromhex("70 61 75 6C").decode()
Jona
bytearray.fromhex ("70e4756c"). decode (encoding = "Latin1") 'päul' Для тех из нас, кто играет в двоичном формате, расширенные символы заглушают декодирование utf-8 по умолчанию, кроме этого, это самый переносимый ответ Я вижу! Спасибо!
Грамбо
Конечно, вы должны знать фактическую кодировку данных, если они должны интерпретироваться как текст. Использование 'latin-1'избавит от любых ошибок, но может привести к полной тарабарщине, если текст на самом деле не Latin-1.
tripleee
43
>>> txt ='7061756c'>>>''.join([chr(int(''.join(c),16))for c in zip(txt[0::2],txt[1::2])])'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)
+1 для полезного примера, но вы не конвертируете «hex» в качестве входных данных, но вы конвертируете любое целое число в шестнадцатеричную строку. Ваш код будет работать одинаково хорошо print convert_hex_to_ascii(123456).
Марк Лаката
5
Кроме того, вы также можете сделать это ...
Python 2 переводчик
print"\x70 \x61 \x75 \x6c"
пример
user@linux:~# python
Python2.7.14+(default,Mar132018,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:~#
или
Python 2 One-Liner
python -c 'print "\x70 \x61 \x75 \x6c"'
пример
user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~#
Python 3 переводчик
user@linux:~$ python3
Python3.6.9(default,Apr182020,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
Python 3 One-Liner
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
Ответы:
Немного более простое решение:
источник
.decode('hex')
на Python 3..decode('hex')
используетbinascii.unhexlify()
на Python 2 .codecs.decode("7061756c", "hex")
работает для Python 2 и Python 3. Но он возвращаетbytes()
строку в Python 3. Но это разумно для строки ASCII.Нет необходимости импортировать любую библиотеку:
источник
bytearray.fromhex("70 61 75 6C").decode()
'latin-1'
избавит от любых ошибок, но может привести к полной тарабарщине, если текст на самом деле не Latin-1.Мне просто весело, но важными частями являются:
сейчас посмотрим на бинаскии ...
круто (и я понятия не имею, почему другие люди хотят заставить вас прыгать через обручи, прежде чем они помогут).
источник
В Python 2:
В Python 3:
источник
Вот мое решение при работе с шестнадцатеричными целыми числами, а не шестнадцатеричными строками:
источник
print convert_hex_to_ascii(123456)
.Кроме того, вы также можете сделать это ...
Python 2 переводчик
пример
или
Python 2 One-Liner
пример
Python 3 переводчик
Python 3 One-Liner
пример
источник
Протестировано в Python 3.3.2 Есть много способов сделать это, вот один из самых коротких, используя только предоставленные Python вещи:
Конечно, если вы не хотите ничего импортировать, вы всегда можете написать свой собственный код. Нечто очень простое, как это:
источник
используйте его без разделителя
источник