最近做pyserial 串口一类的工作,总涉及hex字符串和bytes之间的转换,总结下贴在这里共勉:
**1、**一开始搜索,使用decode()和encode()转换
a = 'a1b2c3d4e5f67890'
a_bytes = a.decode('hex')
print(a_bytes)
结果为:
b'\xa1\xb2\xc3\xd4\xe5\xf6\x78\x90'
解为字符串:
aa = a_bytes.encode('hex')
print(aa)
结果为:
a1b2c3d4e5f67890
之后转用python3 发现不能使用此方法,string格式和bytes格式进行了更新,所以不能使用了。
**2、**然后以python3.5为节点,3.5之前使用如下方法:
>>> a = 'a1b2c3d4e5f67890'
>>> a_bytes= bytes.fromhex(a)
>>> print(a_bytes)
b'\xa1\xb2\xc3\xd4\xe5\xf6x\x90'
(我也不知道为啥出现错误了,用的pycharm,出错率还挺高的)
>>> aa = ''.join(['%02x'%b for b in a_bytes])
>>> print(aa)
a1b2c3d4e5f67890
(转回字符串又是正确的)
**3、**python3.5以后,这么搞:
>>> a = 'a1b2c3d4e5f67890'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xa1\xb2\xc3\xd4\xe5\xf6x\x90'
(还是出错的,错的都一样)
>>> aa = a_bytes.hex()
>>> print(aa)
a1b2c3d4e5f67890
(转回字符串也还是正确的)
使用python3中的两种方法处理,不知道是pycharm的问题还是python3的问题,字符串转bytes的时候会发生错误,发生率还挺高的。后来试了下,是是特殊字符的关系”\x78“ == “x”,但是应该不会妨碍机器识别。可以正常使用。
可以查一下ascll码表去学习下。