从hex编码的ASCIIstring转换为纯ASCII?
如何在Python中将hex转换为纯ASCII?
请注意,例如,我想将“0x7061756c”转换为“paul”。
一个稍微简单的解决scheme:
>>> "7061756c".decode("hex") 'paul'
>>> 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 ' '
现在看binascii …
>>> print binascii.unhexlify('7061756c') paul
酷(我不知道为什么其他人希望让你跳起来,然后他们会帮助)。
无需导入任何库:
>>> bytearray.fromhex("7061756c").decode() 'paul'
这是我的解决scheme时使用hex整数而不是hexstring:
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中testing有很多方法来完成这个,这里是最短的一个,只使用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)