String 将十六进制转换为普通字符串

String 将十六进制转换为普通字符串,string,python-3.x,String,Python 3.x,我正在使用Python3.3.2,我想将十六进制转换为字符串 This is my code: junk = "\x41" * 50 # A eip = pack("<L", 0x0015FCC4) buffer = junk + eip 。。。但是我想要输出“AB”,而不是“b'AB”。我能做什么 编辑: binascii.Error:找到非十六进制数字 问题是我不能连接垃圾+eip 谢谢。那只是字面上的表达。不要担心b,因为它实际上不是字符串本身的一部分 参见那b代表的是表示一个by

我正在使用Python3.3.2,我想将十六进制转换为字符串

This is my code:
junk = "\x41" * 50 # A
eip = pack("<L", 0x0015FCC4)
buffer = junk + eip
。。。但是我想要输出“AB”,而不是“b'AB”。我能做什么

编辑:

binascii.Error:找到非十六进制数字

问题是我不能连接垃圾+eip


谢谢。

那只是字面上的表达。不要担心
b
,因为它实际上不是字符串本身的一部分


参见那
b
代表的是表示一个
bytes
类,即一个字节串。如果要将其转换为字符串,则需要使用decode方法

>>> type(binascii.unhexlify(b"4142"))
<class 'bytes'>
>>> binascii.unhexlify(b"4142").decode('ascii')
'AB'
>类型(binascii.unexlify(b“4142”))
>>>binascii.unexlify(b“4142”).decode('ascii')
“AB”
这将产生一个字符串,即unicode字符的字符串

编辑:

如果您想纯粹使用二进制数据,不要进行解码,请坚持使用bytes类型,因此在您编辑的示例中:

>>> #- junk = "\x41" * 50 # A
>>> junk = b"\x41" * 50 # A
>>> eip = pack("<L", 0x0015FCC4)
>>> buffer = junk + eip
>>> buffer
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xc4\xfc\x15\x00'
>#-junk=“\x41”*50#A
>>>垃圾=b“\x41”*50#A

>>>eip=pack(“mm的可能副本..否。我不想连接任何可表示的字符(例如\x90)。预期结果是什么?这是利用漏洞的一部分,缓冲区包含十六进制字符,无法在ascii模式或utf-8模式下播放(\x90 por示例),但ty。如果是二进制数据,则应将其保留为bytestring。junk=b“\x41”*50#a eip=pack(“字符串类型的表示形式已从python2完全更改为python3。请参见编辑后的答案。哦,更好:),但我无法将eip连接到junk:/
>>> type(binascii.unhexlify(b"4142"))
<class 'bytes'>
>>> binascii.unhexlify(b"4142").decode('ascii')
'AB'
>>> #- junk = "\x41" * 50 # A
>>> junk = b"\x41" * 50 # A
>>> eip = pack("<L", 0x0015FCC4)
>>> buffer = junk + eip
>>> buffer
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xc4\xfc\x15\x00'