Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)


Posted in Python onMay 11, 2020

问题描述

最近做一个项目,是用Python进行相关的串口操作。及将相关指令通过串口发给设备,设备根据发过来的指令来做出相应的操作,所用的库是Pyserial。在最初开发时,出现的问题在于:别人给的文档里面的命令是十六进制的。例如,给出一个指令:

5aa5 07 82 1000 3132 3334 。 那么,我们需要思考的是,我们如何将上面的指令,转换为pyserial库进行写操作时(write)所需要的bytes类型。

解决方法

首先,我们需要知道的是,我们首先,需要用字符串构造成上面的指令,然后我们将它转换成bytes。我们可以使用encode()函数将字符串转为bytes格式:

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

然后我们就可以使用write对串口进行发数据了:

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

这里需要说明的是,我们发送的是字符串的1234,串口那边就根据ascii进行解析。所以就变成了 31 32 33 34。

接下来,再来更换一个场景,我们构造好了一个十六进制的bytes,需要将它还原成字符串:

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

解析串口发过来的数据,首先我们查看从串口发过来的数据格式:

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

可以看到,我们发送的指令,和收到的指令,看起来不一致,那么我们也就无法进行调试,也就无法查看发过来的指令是否有错误,所以,我们需要对接收到的指令进行转换。

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

可以看到,我们通过binascii中的函数,对发送过来的数据进行转换,转换成了我们能够看看懂的命令字符串。

接下来,我们如何将收到的命令,转换为文字?例如,我们收到了一串bytes,如果将它转换为明文?

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

如上图,我们将收到的bytes已经转换成了字符串格式,然后将里面的31 32 33 34提取出来,然后,我们将它们放入一个数组,经过上面的运算以后,我们就得到了明文数据。

如何将十六进制转换为字节流?

Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

上述两个方法均可。

总结

由于对上述的知识点不是特别熟悉,所以表述可能有一定的混乱。当初想实现上述几点功能时也费了很大的劲,所以才写在这里供以后后续使用。后来者进行学习时,无需仔细看文字,只需要看图片,了解前后数据类型的转化成什么样,是否符合自己的需求即可。

补充知识:python中字符之间的转换函数

int(x [,base ]) 将x转换为一个整数

long(x [,base ]) 将x转换为一个长整数

base默认参数值为10,也就是说把字符串'x'视为十进制数转换成十进制数

print int('12345',8) # 5349

float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串

以上这篇Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
Python之文字转图片方法
May 10 Python
Python if语句知识点用法总结
Jun 10 Python
python 将list转成字符串,中间用符号分隔的方法
Oct 23 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
实例代码讲解Python 线程池
Aug 24 Python
基于python实现获取网页图片过程解析
May 11 #Python
python将unicode和str互相转化的实现
May 11 #Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
May 11 #Python
Python urllib.request对象案例解析
May 11 #Python
python将dict中的unicode打印成中文实例
May 11 #Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 #Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 #Python
You might like
ThinkPHP的Widget扩展实例
2014/06/19 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
JSON Web Tokens的实现原理
2017/04/02 Python
python方向键控制上下左右代码
2018/01/20 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
建筑毕业生自我鉴定
2013/10/18 职场文书
追悼会上的答谢词
2014/01/10 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2014年质量工作总结
2014/11/22 职场文书
员工担保书范本
2015/09/22 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
Java 定时任务技术趋势简介
2022/05/04 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android