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实现udp数据报传输的方法
Sep 26 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
Django中的文件的上传的几种方式
Jul 23 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
深度学习详解之初试机器学习
Apr 14 Python
90行Python代码开发个人云盘应用
Apr 20 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实现链结人气统计
2006/10/09 PHP
ZF等常用php框架中存在的问题
2008/01/10 PHP
php 分页函数multi() discuz
2009/06/21 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
PHP crc32()函数讲解
2019/02/14 PHP
jquery搜索框效果实现方法
2015/01/16 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
css3的transition属性详解
2014/12/15 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
简历自我评价模版
2014/01/31 职场文书
军训学生自我鉴定
2014/02/12 职场文书
大专学生求职自荐信
2014/07/06 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
Log4j.properties配置及其使用
2021/08/02 Java/Android
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle