在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节相关的知识,希望对你有一定的参考价值。
我正在转换我的代码,因此它适用于Python 3.剩下的主要问题是成功使用serial.write命令。在我之前的代码中,我创建了一个这样的字符串:read_frame =' xAA x00 x01 x00 x00 x00 x65 x00 x00 x00 x0A x00 x6F x71'。然后使用serial.write(read_frame)发送此字符串。
但是,在Python 3中,我必须将其转换为'byte'才能使用serial.write(read_frame)。如果是静态帧,则将其声明为:read_frame_byte = b' xAA x00 x01 x00 x00 x00 x65 x00 x00 x00 x0A x00 x6F x71'
但问题是,我动态创建了这个十六进制字符串,所以最后我必须将字符串转换为字节。如果我使用命令read_frame.encode('utf-8'),转换会产生不同的十六进制数(例如,x65变为xe,因为这是相应的ASCII值)。这在技术上是正确的,但我只想将字符串转换为字节而不更改任何值。有任何建议/解决方法可以进行此转换吗?
我猜你正在创建一个"AA0001000000650000000A006F71"
形式的十六进制字符串,你想从每对十六进制数字创建一个字节。我不应该猜...
拿你的数据:
>>> digits = "AA0001000000650000000A006F71"
将其拆分为两个字符的块:
>>> [digits[i:i+2] for i in range(0, len(digits), 2)]
['AA', '00', '01', '00', '00', '00', '65', '00', '00', '00', '0A', '00', '6F', '71']
将转换添加到整数,告诉int
内置使用base 16:
>>> [int(digits[i:i+2], 16) for i in range(0, len(digits), 2)]
[170, 0, 1, 0, 0, 0, 101, 0, 0, 0, 10, 0, 111, 113]
最后,将整数列表转换为bytes
对象:
>>> bytes([int(digits[i:i+2], 16) for i in range(0, len(digits), 2)])
b'xaax00x01x00x00x00ex00x00x00
x00oq'
以上是关于在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节的主要内容,如果未能解决你的问题,请参考以下文章