Python字节流、字符串、⼗六进制相互转换(binascii、
bytes)
问题描述
最近做⼀个项⽬,是⽤Python进⾏相关的串⼝操作。及将相关指令通过串⼝发给设备,设备根据发过来的指令来做出相应的操作,所⽤的库是Pyserial。在最初开发时,出现的问题在于:别⼈给的⽂档⾥⾯的命令是⼗六进制的。例如,给出⼀个指令:
5aa5 07 82 1000 3132 3334 。 那么,我们需要思考的是,我们如何将上⾯的指令,转换为pyserial库进⾏写操作时(write)所需要的bytes类型。
解决⽅法
⾸先,我们需要知道的是,我们⾸先,需要⽤字符串构造成上⾯的指令,然后我们将它转换成bytes。我们可以使⽤encode()函数将字符串转为bytes格式:
然后我们就可以使⽤write对串⼝进⾏发数据了:
python怎么读取串口数据这⾥需要说明的是,我们发送的是字符串的1234,串⼝那边就根据ascii进⾏解析。所以就变成了 31 32 33 34。
接下来,再来更换⼀个场景,我们构造好了⼀个⼗六进制的bytes,需要将它还原成字符串:
解析串⼝发过来的数据,⾸先我们查看从串⼝发过来的数据格式:
可以看到,我们发送的指令,和收到的指令,看起来不⼀致,那么我们也就⽆法进⾏调试,也就⽆法查看发过来的指令是否有错误,所以,我们需要对接收到的指令进⾏转换。
可以看到,我们通过binascii中的函数,对发送过来的数据进⾏转换,转换成了我们能够看看懂的命令字符串。
接下来,我们如何将收到的命令,转换为⽂字?例如,我们收到了⼀串bytes,如果将它转换为明⽂?
如上图,我们将收到的bytes已经转换成了字符串格式,然后将⾥⾯的31 32 33 34提取出来,然后,我们将它们放⼊⼀个数组,经过上⾯的运算以后,我们就得到了明⽂数据。
如何将⼗六进制转换为字节流?
上述两个⽅法均可。
总结
由于对上述的知识点不是特别熟悉,所以表述可能有⼀定的混乱。当初想实现上述⼏点功能时也费了很⼤的劲,所以才写在这⾥供以后后续使⽤。后来者进⾏学习时,⽆需仔细看⽂字,只需要看图⽚,了解前后数据类型的转化成什么样,是否符合⾃⼰的需求即可。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论