【Python】bytes和hex字符串之间的相互转换。

python 源码巴士 404浏览

【Python】bytes和hex字符串之间的相互转换。
反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换,记录在这里吧。

  1. 在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转换是这样的:
>>> a = 'aabbccddeeff'
>>> a_bytes = a.decode('hex')
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = a_bytes.encode('hex')
>>> print(aa)
aabbccddeeff
>>>
  1. 在python 3环境上,因为string和bytes的实现发生了重大的变化,这个转换也不能再用encode/decode完成了。

2.1 在python3.5之前,这个转换的其中一种方式是这样的:

>>> a = 'aabbccddeeff'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = ''.join(['%02x' % b for b in a_bytes])
>>> print(aa)
aabbccddeeff
>>>

2.2 到了python 3.5之后,就可以像下面这么干了:

>>> a = 'aabbccddeeff'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = a_bytes.hex()
>>> print(aa)
aabbccddeeff
>>>
last
data = b'\x820\xb100\x03\xc3\xb4'
print('type(data) = ', type(data))
#type(data) =  <class 'bytes'>


lst = list(data)
print(lst)
print(type(lst[0]))
#[130, 48, 177, 48, 48, 3, 195, 180]
#<class 'int'>

tmp = data.hex()

print(type(tmp), tmp)
# <class 'str'> 8230b1303003c3b4

strr = '8230b1303003c3b4'

num = bytes.fromhex(strr)

print(type(num), num)
# <class 'bytes'> b'\x820\xb100\x03\xc3\xb4'

转载请注明:源码巴士 » 【Python】bytes和hex字符串之间的相互转换。