【ARM 嵌入式 C 文件操作系列 20.3 -- 二进制文件转为16进制数组】


请阅读【嵌入式开发学习必备专栏】


文章目录

    • binary to hex
      • C code
      • 测试效果
      • Makefile 编译

binary to hex

在嵌入式开发的过程中经常遇到需要将二进制文件转换为十六进制数组的需求,比如需要将某个镜像文件转换为数组,然后通过写memory的方式将镜像文件加载到内存中。下面代码给出了如何使用C 代码将一个二进制文件转为十六进制数据。

C code

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>int main(int argc, char *argv[])
{FILE *fpIn, *fpOut;uint32_t buffer[1];uint64_t i = 0x200000000ULL;size_t bytesRead;if (argc < 2) {printf("Usage: %s offset\n", argv[0]);return 1;}const char *file_name  = argv[1];/* uint64_t base = atoi(argv[2]); */fpIn = fopen(file_name, "rb");if (fpIn == NULL) {perror("Error opening file");return EXIT_FAILURE;}fpOut = fopen("test_data.h", "w");if (fpOut == NULL) {perror("Error opening file");fclose(fpIn);return EXIT_FAILURE;}fprintf(fpOut, "#ifndef __TEST_DATA_H__\n");fprintf(fpOut, "#define __TEST_DATA_H__\n\n");fprintf(fpOut, "struct test_str test_data[] = {\n");while ((bytesRead = fread(buffer, sizeof(buffer[0]), 1, fpIn)) == 1) {fprintf(fpOut, "{0x%" PRIx64 ",", i);fprintf(fpOut, "0x%08X,},\n", buffer[0]);i += sizeof(buffer[0]);}fprintf(fpOut, "};\n\n");fprintf(fpOut, "#endif // __TEST_DATA_H__\n");fclose(fpIn);fclose(fpOut);return EXIT_SUCCESS;
}

这段代码首先尝试以二进制读取模式打开文件,然后以写模式打开test_data.h文件。通过fread函数以4字节为一个单位循环读取数据,每次读取成功后,将读取到的数据以指定格式写入到test_data.h文件中。

测试效果

#ifndef __TEST_DATA_H__
#define __TEST_DATA_H__struct test_str test_data[] = {
{0x200000000,0x02033000,},
{0x200000004,0x00801F85,},
{0x200000008,0x00802041,},
{0x20000000c,0x00802041,},
{0x200000010,0x00802041,},
{0x200000014,0x00802041,},
{0x200000018,0x00802041,},
{0x20000001c,0x00000000,},
{0x200000020,0x00000000,},
{0x200000024,0x00000000,},
{0x200000028,0x00000000,},
...

第一列为地址,第二例为数据。

Makefile 编译

# 定义编译器
CC = gcc# 定义编译选项
CFLAGS = -Wall# 定义源文件
SOURCES = bin2hex.c #d.c# 定义目标文件
OBJECTS = $(SOURCES:.c=.o)# 定义可执行文件
EXECUTABLE = bin2hex# 默认目标
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)$(CC) $(CFLAGS) $(OBJECTS) -o $@# 通用规则用于从每个.c文件构建.o文件
%.o: %.c$(CC) $(CFLAGS) -c $< -o $@#$(shell awk -F, 'NR >= 0 && $2 != "0x00000000" {print}' test_data.h > demo_firmware.h)# 清理编译产物的目标
clean:rm -f $(OBJECTS) $(EXECUTABLE)

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

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

相关文章

华为涅槃,余承东重生

最近一段时间&#xff0c;余承东甚为低调。最为明显的是&#xff0c;“遥遥领先”已经听不到了&#xff0c;“余大嘴”口中的措辞越来越克制。 今后手机相关的发布会&#xff0c;或许不再看到余承东的身影。 5月10日&#xff0c;余承东的职位正式更新&#xff0c;从终端BG CE…

Linux/ubuntu build编译make时出现has modification time int the future的问题解决方法

针对Linux由于双系统之间的时间冲突导致linux时间经常变化&#xff0c;出现执行make命令时出现“make[2]: Warning: File xxx.c’ has modification time 1.6e05 s in the future “警告的问题&#xff0c;亦或者虚拟机出现相同的问题。 由于时钟同步问题&#xff0c;出现 warn…

菲律宾签证照片尺寸要求,用手机生成

菲律宾签证照片尺寸要求如下图所示&#xff0c;可以用手机在微信搜索随时照小程序&#xff0c;快速生成哦。

【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手

文章目录 一、前言二、绘制效果三、ConstraintLayout 使用方法3.1 创建布局文件3.2 替换配置3.3 设置约束&#xff0c;步骤13.4 设置约束&#xff0c;步骤23.5 其他设置 四、结束 一、前言 在进行Android APP开发过程中&#xff0c;减少layout嵌套即可改善UI的绘制性能&#x…

vue 百度地图点击marker修改marker图片,其他marker图片不变。

解决思路&#xff0c;就是直接替换对应marker的图片。获取marker对象判断点击的marker替换成新图片&#xff0c;上一个被点击的就替换成老图片。 marker.name tag;marker.id i; //一定要设置id&#xff0c;我这里是设置的循环key值&#xff0c;要唯一性。map.addOverlay(mark…

【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 Cortex-M7 Debug eventDebug events Cortex-M7 Debug event 在ARM Cortex-M7架构中&#xff0c;调试事件&#xff08;Debug Event&#xff09;是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生&#xff1a; 进…

2022-1990年 各省碳排放Co2数据集(含数据及参考文献)

碳排放是指人类活动产生的二氧化碳&#xff08;CO2&#xff09;等温室气体释放到大气中的过程。通过划分排放源的范围以避免重复计算的思想&#xff0c;由世界资源研究所在关于企业温室气体排放清单编制的指南中首次提出。城市碳排放核算边界界定借鉴该思想&#xff0c;可分为3…

物联网应用开发--STM32与新大陆云平台通信(云平台控制开发板上蜂鸣器、LED)

实现目标 1、掌握云平台执行器的创建 2、熟悉STM32 与ESP8266模块之间的通信 3、具体实现目标&#xff1a;&#xff08;1&#xff09;创建5个执行器&#xff1a;蜂鸣器&#xff0c;LED1&#xff0c;LED2&#xff0c;ED3&#xff0c;LED4;&#xff08;2&#xff09;执行器能对…

【C++】每日一题 17 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 可以使用回溯法来解决这个问题。首先定义一个映射关系将数字与字母对应起来…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计&#xff1a;高内聚 低耦合 Controller 调用Service&#xff0c; Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB&#xff0c;Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…

文本批量高效管理,一键删除前后第一行,轻松提升工作效率!

在信息爆炸的时代&#xff0c;文本处理成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;面对大量的文本数据&#xff0c;如何高效地进行批量管理&#xff0c;成为了许多人头疼的问题。今天&#xff0c;我们将向您介绍一种简单而高效的方法&#xff0c;让您轻松删除…

学习方法论

下面是我当时大一做的总结&#xff0c;可供参考&#xff1a; ㊗注意★ 以下所有方法都可以从知乎中找到具体描述&#xff0c;我只是把有用的给整合出来了。 学习方法本身&#xff1a; 上课听逻辑。老师是怎么由一个知识点讲到另一个知识点的&#xff0c;怎么把这些知识点串联…

【UE5.1 角色练习】01-使用小白人蓝图控制商城角色移动

目录 效果 步骤 一、导入资源 二、控制角色移动 三、更换角色移动动作 效果 步骤 一、导入资源 新建一个工程&#xff0c;然后在虚幻商城中将角色动画的相关资源加入工程&#xff0c;这里使用的是“动画初学者内容包”和“MCO Mocap Basics” 将我们要控制的角色添加进…

【使用Condition来模拟生产消费】

使用Condition来模拟生产消费 1. 关于ReentrantLock 和condition的认知?2.使用condition实现生产者-消费者1. 关于ReentrantLock 和condition的认知? /*Q: ReentrantLock是如何实现管理锁和线程的?A: ReentrantLock是并发包中 一个类,它实现了Lock接口,提供了比内置synch…

Elasticsearch:检索多向量文档中的原始信息

作者&#xff1a;来自 Elastic Gilad Gal Elasticsearch&#xff08;从 8.11 版本及更高版本开始&#xff09;支持单个字段中每个文档具有多个向量。 这样的文档可以通过文档的最相似向量的排名或者通过每个文档具有多个结果&#xff08;可能在同一结果集中文档包含的每个向量…

搜索引擎的设计与实现(四)

目录 6 系统测试 6.1测试重要性 6.2测试用例 结 论 参 考 文 献 前面内容请移步 搜索引擎的设计与实现&#xff08;三&#xff09; 免费源代码&毕业设计论文 搜索引擎的设计与实现 6 系统测试 6.1测试重要性 该项目是在本地服务器上进行运行和调试&#xff0c;…

【从零开始学习Redis | 第十一篇】快速介绍Redis持久化策略

前言&#xff1a; Redis 作为一种快速、高效的内存数据库&#xff0c;被广泛应用于缓存、消息队列、会话存储等场景。然而&#xff0c;由于其特性是基于内存的&#xff0c;一旦服务器进程退出&#xff0c;内存中的数据就会丢失。为了解决这一问题&#xff0c;Redis 提供了持久…

IT技术产品:开发者极为重要的思维习惯

1、特色内容预告 1、我用敏捷开发思维&#xff0c;提高工作效率。 2、我用代码批判思维&#xff0c;逐渐让自己的作品变得无可挑剔。 3、我是一个顶级程序员&#xff0c;是哪些重要的专业习惯&#xff0c;让我如此优秀&#xff1f; 2、可以免费获取到的IT资源 1、《软件工程&a…

paddle ocr 版面分析

教程 https://github.com/PaddlePaddle/PaddleOCR/blob/a4b7d3ba4a8333a23bab1fc1472aa18deec211d1/ppstructure/layout/README_ch.md 额外的模型&#xff0c;但是yolov2的模型缺少yml配置文件&#xff0c;找不到 https://github.com/PaddlePaddle/PaddleOCR/blob/main/ppstruc…

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算(中断单次测量、卡尔曼滤波)

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算&#xff08;中断单次测量、卡尔曼滤波&#xff09; 文章目录 ADXL345的一般读取方式ADXL345的中断读取方式&#xff08;单次测量&#xff09;角度计算卡尔曼滤波优化后完整代码附录&#xff1a;压缩字符串、大小端格式…