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 web基础之加载静态文件实例
Mar 20 Python
Tensorflow卷积神经网络实例
May 24 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Python socket实现的简单通信功能示例
Aug 21 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
python cumsum函数的具体使用
Jul 29 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
OpenCV读取与写入图片的实现
Oct 13 Python
python 下载文件的多种方法汇总
Nov 17 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
pytorch 实现变分自动编码器的操作
May 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
PHP入门学习的几个不错的实例代码
2008/07/13 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP序列化操作方法分析
2016/09/28 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
javascript 继承实现方法
2009/08/26 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python的文件操作方法汇总
2017/11/10 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Python遍历字典方式就实例详解
2019/12/28 Python
为什么称python为胶水语言
2020/06/16 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
安全协议书范本
2014/04/21 职场文书
机械机修工岗位职责
2014/08/03 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
团代会开幕词
2015/01/28 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书