从十六进制编码的 ASCII 字符串转换为普通 ASCII? ?

如何在 Python 中将十六进制转换为纯 ASCII?

注意,例如,我想将“0x7061756c”转换为“ paul”。

584865 次浏览
>>> 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

酷(我不知道为什么其他人想让你在他们帮忙之前跳过圈)。

一个稍微简单一点的解决方案:

>>> "7061756c".decode("hex")
'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)

在 Python 3.3.2中测试 有很多方法可以实现这一点,这里有一个最简单的方法,只使用 Python 提供的东西:

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)

无需导入任何图书馆:

>>> bytearray.fromhex("7061756c").decode()
'paul'

在 Python 2中:

>>> "7061756c".decode("hex")
'paul'

在 Python 3中:

>>> bytes.fromhex('7061756c').decode('utf-8')
'paul'

或者,你也可以这样做..。

Python2解释程序

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:~#

或者

Python 2 One-Liner Python 2一行程序

python -c 'print "\x70 \x61 \x75 \x6c"'

例子

user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~#

Python3解释程序

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

Python 3 One-Liner Python 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
b''.fromhex('7061756c')

不用分隔符

不需要导入任何东西,尝试这个简单的代码与例子如何转换任何十六进制成字符串

python hexit.py
Hex it>>some string




736f6d6520737472696e67


python tohex.py
Input Hex>>736f6d6520737472696e67
some string
cat tohex.py




s=input("Input Hex>>")
b=bytes.fromhex(s)
print(b.decode())