在Python 3中将字节转换为hexstring的正确方法是什么?
在Python 3中将字节转换为hexstring的正确方法是什么?
我看到一个bytes.hex
方法的声明, bytes.decode
编解码器,并尝试了其他可能的function,最小的惊讶没有用。 我只是想要我的字节为hex!
使用binascii
模块:
>>> import binascii >>> binascii.hexlify('foo'.encode('utf8')) b'666f6f' >>> binascii.unhexlify(_).decode('utf8') 'foo'
看到这个答案: Python 3.1.1string到hex
自从Python 3.5以来,这终于不再是尴尬的了:
>>> b'\xde\xad\xbe\xef'.hex() 'deadbeef'
并相反:
>>> bytes.fromhex('deadbeef') b'\xde\xad\xbe\xef'
也适用于可变的bytearray
types。
Python具有字节到字节的标准编解码器 ,可执行方便的转换,如引用可打印(适用于7位ascii),base64(适合字母数字),hex转义,gzip和bz2压缩。 在Python 2中,你可以这样做:
b'foo'.encode('hex')
在Python 3中, str.encode
/ bytes.decode
严格用于字节转换。 相反,你可以做到这一点,它适用于Python 2和Python 3(反编译/解码/克 ):
import codecs codecs.getencoder('hex')(b'foo')[0]
从Python 3.4开始,有一个不太尴尬的select:
codecs.encode(b'foo', 'hex')
这些misc编解码器也可以在自己的模块(base64,zlib,bz2,uu,quopri,binascii)中访问。 API不太一致,但是对于压缩编解码器,它提供了更多的控制。
import codecs codecs.getencoder('hex_codec')(b'foo')[0]
在Python 3.3中工作(所以“hex_codec”而不是“hex”)。
方法binascii.hexlify()
将bytes
转换为表示asciihexstring的bytes
。 这意味着input中的每个字节都将被转换为两个ASCII字符。 如果你想要一个真正的str
,那么你可以.decode("ascii")
的结果。
我包括一个说明它的片段。
import binascii with open("addressbook.bin", "rb") as f: # or any binary file like '/bin/ls' in_bytes = f.read() print(in_bytes) # b'\n\x16\n\x04' hex_bytes = binascii.hexlify(in_bytes) print(hex_bytes) # b'0a160a04' which is twice as long as in_bytes hex_str = hex_bytes.decode("ascii") print(hex_str) # 0a160a04
从hexstring"0a160a04"
到可以回到带有binascii.unhexlify("0a160a04")
的bytes
,这会返回b'\n\x16\n\x04'
如果你想将b'\ x61'转换为97或'0x61',你可以试试这个:
[python3.5] >>>from struct import * >>>temp=unpack('B',b'\x61')[0] ## convert bytes to unsigned int 97 >>>hex(temp) ##convert int to string which is hexadecimal expression '0x61'
参考: https : //docs.python.org/3.5/library/struct.html