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标准库之itertools库的使用方法
Sep 07 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
Python的argparse库使用详解
Oct 09 Python
python操作kafka实践的示例代码
Jun 19 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
Python ConfigParser模块的使用示例
Oct 12 Python
Django跨域请求原理及实现代码
Nov 14 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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将数据导入到Foxmail
2006/10/09 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
JS event使用方法详解
2008/04/28 Javascript
div层的移动及性能优化
2010/11/16 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python科学画图代码分享
2017/11/29 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
详解python statistics模块及函数用法
2019/10/27 Python
python绘制汉诺塔
2021/03/01 Python
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
应聘自荐信
2013/12/14 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
大学军训的体会
2014/11/08 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android