将PySerial的Readline从字符串转换为二进制
我从一个PIC微控制器发送了字节串0x0F, 0x07, 0x55, 0x55, 0x55。
我通过串口用Python的PySerial库执行readlines()命令来接收数据。结果是:
['\x0f\x07UUU']
这个结果确实和我发送的字节串对应,但它的格式看起来像是奇怪的十六进制和ASCII字符的组合。有没有什么好的方法可以把它重新格式化成0x0F, 0x07, 0x55, 0x55, 0x55?
3 个回答
0
要把数据转换回十六进制:
>>> data = binascii.hexlify('\x0f\x07UUU')
>>> ['0x' + data[i:i+2] for i in range(0, len(data), 2)]
['0x0f', '0x07', '0x55', '0x55', '0x55']
1
看看 binascii.hexlify
这个东西。根据它的描述:
它会把二进制数据转换成十六进制的表示形式。每一个字节的数据都会被转换成对应的2位十六进制数。所以,转换后的字符串长度是原数据长度的两倍。
举个例子:
>>> import binascii
>>> binascii.hexlify('\x0f\x07UUU')
'0f07555555'
2
在Python 2中,字节串(str)是由8位字符组成的字符串,所以它的表现形式就是这样。可以使用“ord”这个函数把每个字符转换成整数:
>>> [ord(c) for c in '\x0f\x07UUU']
[15, 7, 85, 85, 85]