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学习笔记_数据排序方法
May 22 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
python logging模块的使用总结
Jul 09 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
python检测服务器端口代码实例
Aug 31 Python
pytorch多GPU并行运算的实现
Sep 27 Python
Python 线程池用法简单示例
Oct 02 Python
python实现计算器功能
Oct 31 Python
Python双链表原理与实现方法详解
Feb 22 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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
wordpress之wp-settings.php
2007/08/17 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
php中error与exception的区别及应用
2014/07/28 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
python操作日期和时间的方法
2014/03/11 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
python 获取等间隔的数组实例
2019/07/04 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
python缩进长度是否统一
2020/08/02 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
道路施工安全责任书
2014/07/24 职场文书
2014年妇女工作总结
2014/12/06 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
法人代表证明书范本
2015/06/18 职场文书
英语读书笔记
2015/07/02 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android