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 相关文章推荐
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python实现元素等待代码实例
Nov 11 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
python实现QQ邮箱发送邮件
Mar 06 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
python和c语言哪个更适合初学者
Jun 22 Python
django教程如何自学
Jul 31 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 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
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
$()JS小技巧
2007/07/21 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
React 组件间的通信示例
2018/06/14 Javascript
koa源码中promise的解读
2018/11/13 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python最长回文串算法
2018/06/04 Python
python绘制雪景图
2019/12/16 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
介绍一下SQL Server的全文索引
2013/08/15 面试题
广州迈达威.net面试题目
2012/03/10 面试题
大学生工作推荐信范文
2013/12/02 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
社会实践的活动方案
2014/08/22 职场文书
js之ajax文件上传
2021/05/13 Javascript