Python应用开发——制作bin文件

news2024/11/15 11:56:36

Python应用开发——制作bin文件

目录

  • Python应用开发——制作bin文件
    • 前言
    • 1 环境搭建
    • 2 代码编写与测试
    • 结束语

前言

什么是bin?

bin是二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚拟光驱文件。一般来讲是机器代码,汇编语言编译后的结果。

在嵌入式开发中bin文件常当做烧录固件,是代码编译后的结果。
实际上bin是存储二进制的一种文件格式,它不仅可以存放代码,还可以存放各种数据,比如图片、音乐、视频等,也可以存放一些自定义的数据,比如:当我们需要用串口或者USB传输大量的数据时,就可以把数据打包成bin文件,这样的话方便一些上位机软件读写。
还有就是有时候我们需要在一个bin文件上面进行批量修改,比如:每个设备自带一个独立的序列号,这个是在代码上面写死的,但是如果每次都得修改代码再重新编译生成bin文件,那就太麻烦了,这个时候我们就可以用python直接修改bin文件,这样就可以减少很多工作量。

1 环境搭建

Python的环境这里就不具体介绍了,网上教程也很多。

特别说明:本文举的例子皆是基于windows系统下python3来实现的,其他平台不一定完全适配。

2 代码编写与测试

1、将一个列表的数据输出到一个bin文件
示例代码如下:

output_path = 'test.bin'  # 输出文件的路径和文件名称,这里直接放在工程根目录下,所以没有写绝对路径

# 待写入的数据
li = [0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22]

print(bytes(li))

with open(output_path, 'ab') as f:
    f.write(bytes(li))
    f.close()

运行结果:
在这里插入图片描述
运行后查看生成的文件:
在这里插入图片描述

2、在一个bin文件末尾增加数据
示例代码如下:

test_path = 'test.bin'  # 输入文件的路径和文件名称,这里是在工程根目录下,所以没有写绝对路径

# 待插入的数据
li = [0x10, 0x11, 0x12, 0x13, 0x14]
# print(bytes(li))

# 打开并查看原文件
with open(test_path, 'rb') as f:
    print(bytes(f.read()))  #查看文件内容

# 插入数据
with open(test_path, 'ab+') as f:   # ab+: 在文本末尾追加内容
    f.write(bytes(li))
    f.close()

# 打开并查看插入数据后的文件
with open(test_path, 'rb') as f:
    print(bytes(f.read()))  #查看文件内容

运行前查看原文件:
在这里插入图片描述
运行结果:
在这里插入图片描述
运行后查看文件:
在这里插入图片描述

3、修改bin文件里面的某些数据
示例代码如下:

test_path = 'test.bin'  # 输入文件的路径和文件名称,这里是在工程根目录下,所以没有写绝对路径
lines = []

# 打开原文件并读取原数据
with open(test_path, 'rb') as f:
    lines = list(f.read())
    print(bytes(lines))  # 打印文件内容
    f.close()

# 对原数据进行修改
lines[0] = 0xAA
lines[2] = 0xBB

# 把新数据覆盖到原文件
with open(test_path, 'wb') as f:
    # 重新写入数据
    f.write(bytes(lines))
    f.close()

# 打开并查看修改数据后的文件
with open(test_path, 'rb') as f:
    print(bytes(f.read()))  # 查看文件内容

运行前查看原文件:
在这里插入图片描述
运行结果:
在这里插入图片描述
运行后查看文件:
在这里插入图片描述

结束语

好了,关于如何使用Python制作一个bin文件就讲到这里,这里只是列举了一下我觉得常用到的一些操作,实际上还有很多种实现方式,在Python这个领域我也是小白一个,只是根据以往嵌入式的经验列举了这么一些例子,如果有哪里写的不对或者写的不够好的,欢迎评论区留言指正,谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无代码配置态势感知分析应用,预判你的预判

森林发生火势灾情时,应急管理中心快速做出部署,实时监测并分析演变趋势大型交通事故发生,应急指挥中对前端人员、车辆的远程调度线路规划实时监测无人机对电站电厂的运维工作公安警务对嫌疑人、嫌疑车辆等目标的跟踪侦查……以上这些&#xf…

Acwing---基础算法(一)

文章目录 快速排序归并排序整数二分浮点数二分一、快速排序 #include<iostream>using namespace std;const int N 1e6 10;int n; int q[N];void quick_sort(int q[], int l, int r) {//此时区间只有一个数或者没有数不需要排序了if (l > r) return;int x q[l], i…

【QCA】【实例】高通DTS中添加BLSP设备节点的基本配置

文章目录0. env1. 简介2. 需求及资料2.1 需求2.2 资料3. DTS实际配置及简述0. env IPQ601x SPF11.5cs 1. 简介 BLSP(BAM Low-Speed Peripheral) 不同chip有不止一组的BLSP&#xff0c;每个BLSP又有多个端口供使用。 每个端口功能可以复用为&#xff1a;SPI 或者 I2CUART 2. 需求…

计算机网络知识详解之:TCP连接原理详解

网络知识详解之&#xff1a;TCP连接原理详解 文章目录网络知识详解之&#xff1a;TCP连接原理详解TCP连接三次握手一、准备工作二、一次握手三、二次握手四、三次握手为什么TCP客户端最后还要发送一次确认呢&#xff1f;为什么要3次握手?握手中的SYN超时重试TCP协议缺陷四次挥…

HECS 安装mqtt

下载(hecs &#xff0c;centos8的样子&#xff0c;对mosquitto 版本高了安装不了)wget https://mosquitto.org/files/source/mosquitto-1.5.9.tar.gztar -zxvf mosquitto-1.5.9.tar.gz安装前置工具yum install gcc-cyum install cmakeyum install openssl-devel编译cd mosquitt…

Vue项目启动后跳转到制定路由页面

前言 今天把自己的项目布局完成了&#xff0c;但是想在项目启动的时候默认跳转到登录页面。 这其实需要借助路由实现跳转 开始编写之前&#xff0c;大家可以看下我的布局&#xff1a; 安装并使用路由 关于如何安装并使用路由&#xff0c;可以参考&#xff1a;Vue安装并使用路…

LeetCode_单周赛_330

6337. 统计桌面上的不同数字 代码 后面出现的数字都是小于 n 的。 n 1 时&#xff0c;答案是 1。 n > 1时&#xff1a; 第一天&#xff0c;n % (n - 1) 1&#xff0c;n - 1会被加入第二天&#xff0c;(n - 1) % (n - 2) 1&#xff0c;n - 2 被加入 递推&#xff0c;一…

Java 8 Optional 介绍

1. 前言 空指针确实会产生很多问题&#xff0c;我们经常遇到空的引用&#xff0c;然后又想从这个空的引用上去获取其他的值&#xff0c;接着理所当然的碰到了 NullPointException。这是你可能会想&#xff0c;这报错很好处理&#xff0c;然后你看了眼报错行数&#xff0c;对比了…

聚合函数学习

文章目录聚合函数介绍理解类型语法AVG和SUMMIN和MAX函数COUNT函数GROUP BY基本使用使用多个列分组GROUP BY中使用WITH ROLLUPHAVING基本使用WHERE和HAVING的对比SELECT执行顺序查询结构SELECT执行顺序SQL 的执行原理聚合函数介绍 理解 聚合&#xff08;或聚集、分组&#xff…

java集合类-Map

Map-增强的Map集合 Map用于保存具有映射关系的数据&#xff0c;因此Map集合里保存着两组值&#xff0c;一组值用于保存Map里的key&#xff0c;另外一组值用于保存Map里的value&#xff0c;key和value都可以是任何引用类型的数据。Map的key不允许重复&#xff0c;即同一个Map对象…

【Linux】TCP三次握手,四次挥手原理

今天在书中找到了比较详细的解释&#xff0c;记录一下 三次握手 在可以使用TCP链路之前&#xff0c;必须在客户端和主机之间显式建立连接。如上所述&#xff0c;在主动&#xff08;active&#xff09;和被动&#xff08;passive&#xff09;连接的建立方式是有区别的。 内核…

生鲜巨变:每日优鲜、叮咚买菜、盒马“分道扬镳”?

此前&#xff0c;在疫情影响下&#xff0c;人们出门购物频次减少&#xff0c;传统买菜模式也受到了一定的冲击。在此背景下&#xff0c;既能够解决人们买菜难题又能够减少人与人接触的生鲜电商&#xff0c;赢得了众多消费者的青睐。而随着大量用户涌入其中&#xff0c;整个生鲜…

【GD32F427开发板试用】硬件IIC读取SHT40温湿度传感器

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;烟花易冷 介绍 很荣幸又能再次的参加技术社区的开发板试用活动&#xff0c;此次参加用的是GD32F427系列的芯片&#xff0c;该芯片相较于GDF31…

OpenPPL PPQ量化:原理与实践

目录 量化原理 为什么需要量化&#xff1f; 量化粒度 框架综述 算子划分 量化中的图融合操作 量化实践&#xff1a;以pytorch mobilenet v2 模型为例 源码阅读 torch模型和onnx量化过程中的区别 后记 量化原理 为什么需要量化&#xff1f; 1、减少内存带宽和存储空…

C++Morris遍历

一、关于Morris算法 简介 Morris算法是针对二叉树实现的一个遍历算法&#xff0c;它是一种空间复杂度为O(1)的遍历算法 通常情况下使用迭代或递归的方式遍历二叉树的空间开销都是O(N)级别的&#xff0c;较为理想的情况下可以做到O(logn)级别&#xff0c;而Morris算法通过更改…

Windows Kerberos客户端配置并访问CDH

安装 Kerberos 客户端 配置 hosts 1、配置集群 hosts 到 Windows&#xff08;C:\Windows\System32\drivers\etc\hosts&#xff09;&#xff1b; 2、调整windows环境变量&#xff0c;将系统环境变量 PATH 中的 C:\Program Files\MIT\Kerberos\bin 放置在最前边&#xff0c;建…

目标跟踪心得篇五:MOT数据集标注、DarkLabel不能自动跟踪解决方案

跟踪方向的标注成本非常很大的 ,那么我们如何尽可能一次性弄好呢? 所选标注工具:DarkLabel DarkLabel是一个轻量的视频标注软件,尤其做MOT任务非常友好,其标注可以通过脚本转化为标准的目标检测数据集格式、ReID数据集格式和MOT数据集格式。 使用之前: darklabel.yml:保…

Python国际化学习教程

很幸运python提供了中文等其他语言的教程&#xff01; 这里以13.11.1为例 Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质&#xff0c;使它成为多数平台上写…

nacos的本地配置与启动步骤及NoDataSourceset问题解决

文章前提是本地机器已经安装好了mysql&#xff0c;配置好了mysql与Java环境变量。 首先在网络上找到一个nacos-server包。我本想上传自己的包&#xff0c;但是总是提示资源已经存在&#xff0c;那么可以自行搜索下。 解压开后是个.gz的文件&#xff0c;可以用windows自带的Win…

Golang Profiling - pprof 使用

Golang Profiling - pprof 使用 在编写大型应用程序&#xff0c;处理复杂业务与逻辑时&#xff0c;开发者经常面临系统内存泄漏问题。查找代码是否有效运行的一种有效方法是检查内存堆、CPU、磁盘的使用情况。 要在运行时检查Go应用程序的CPU和内存使用情况以及其他配置文件&…