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

时间:2014-03-10 02:02:34

标签: string python-3.x

我正在使用Python 3.3.2,我希望将十六进制转换为字符串。

This is my code:
junk = "\x41" * 50 # A
eip = pack("<L", 0x0015FCC4)
buffer = junk + eip

我尝试过使用

>>> binascii.unhexlify("4142")
b'AB'

...但我希望输出“AB”,没有“b'AB'”。我该怎么办?

编辑:

buffer = junk + binascii.unhexlify(eip).decode('ascii')

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

问题是我无法连接垃圾+ eip。

谢谢。

2 个答案:

答案 0 :(得分:1)

b代表的是表示bytes类,即一串字节。如果要将其转换为要使用解码方法的字符串。

>>> type(binascii.unhexlify(b"4142"))
<class 'bytes'>
>>> binascii.unhexlify(b"4142").decode('ascii')
'AB'

这会产生一个字符串,它是一串unicode字符。

编辑:

如果你想纯粹使用二进制数据,不要做解码,坚持使用字节类型,所以在你编辑的例子中:

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

注意b中的b"\x41",它表示二进制字符串,即python2中的标准字符串类型,或者字面意思是一串字节而不是一串unicode字符,它们是完全不同的的东西。

答案 1 :(得分:0)

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

请参阅What does the 'b' character do in front of a string literal?