您可以使用 binascii.unhexlify 如果在字符串中键入转义的十六进制数字是一件苦差事,例如:
binascii.unhexlify
from binascii import unhexlify b = 'A'*10 + unhexlify('BEEF' * 6) + 'B'*10 # 'AAAAAAAAAA\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xefBBBBBBBBBB'
但是在Python 3中,您必须确保以字节字符串开头(或者您将收到一个 TypeError: Can't convert 'bytes' object to str implicitly ):
TypeError: Can't convert 'bytes' object to str implicitly
b'A'*10 + unhexlify('BEEF' * 6) + b'B'*10 # b'AAAAAAAAAA\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xefBBBBBBBBBB'
另一种可能性是使用 struct 模块,这给你更多的控制 在输出上。这是一个Python 2.7示例:
struct
import struct s = struct.pack("6H", *[0xbeef]*6)
s 是以下字符串:
s
'\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe'
您可以打包长整数,有符号或无符号,或双浮点数等。 例如,这里填充为double的相同十六进制值:
>>> struct.pack("6d", *[0xbeef]*6) '\x00\x00\x00\x00\xe0\xdd\xe7@\x00\x00\x00\x00\xe0\xdd\xe7@\x00\x00\x00\x00\xe0\xdd\xe7@\x00\x00\x00\x00\xe0\xdd\xe7@\x00\x00\x00\x00\xe0\xdd\xe7@\x00\x00\x00\x00\xe0\xdd\xe7@'
还有可能指定结束。当然,要做相反的操作(拆包)。