hex文件格式解析,hex转bin(C语言)
前言
hex转bin文件网上有很多现成的工具,但还是想了解下其中的数据结构跟原理
区别
hex跟bin都是程序烧写的文件,那他们有什么不同呢?
首先看大小,hex文件都会大于bin文件,hex文件打开可以看到一堆数字,而bin文件只会得到一堆乱码。
其实bin文件就是你程序执行文件的二进制文件,里面可以看做都是机械码,芯片可以直接运行的
hex文件不但包含bin文件的内容(需要自己转),还有具体内容存放地址,程序运行开始位置等。所以我们用烧录器烧程序都需要用hex而不是bin,因为bin没有程序具体烧录地址的位置。
分析
首先我们随便用记事本打开一个hex文件,可以看到
其格式表示为:
起始 | 本行数据长度 | 偏移量 | 数据类型 | 数据 | 校验码 |
:(冒号) | len | load offset | type | data | checksum |
- 以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)
其中数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
'00' Data Rrecord: 用来记录数据,HEX文件的大部分记录都是数据记录
'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
'02' Extended Segment Address Record:用来标识扩展段地址的记录
'03' Start Segment Address Record: 开始段地址记录
'04' Extended Linear Address Record: 用来标识扩展线性地址的记录
'05' Start Linear Address Record: 开始线性地址记录
如上图第一行(所有的数字两个为一个字节,要以16进制的方式去看。但是其存在文本是以ascii去存放的),
:020000040801F1
: 表示这一行的数据起始位
02: 表示这一行的数据有两个字节的长度(其中08为一个,01为一个)
0000 表示偏移值
04 表示数据类型,看上面列出的5种。04--标识扩展线性地址的记录,
官方文档解释为32位扩展线性地址记录用于指定线性基址的位16-31
0801 表示数据内容,这里表示具体的扩展线性地址的值为0x0801
F1 是校验位,运算规则是 0x100 - 前面除冒号所有16进制累加和
这里就为 0x100 - ((0x02+0x00+0x00+0x04+0x08+0x01)&0xff) = 0xf1
综合来看,这一行表示将地址指向0x08010000的地址,后面的所有操作就会根据这个地址来存放数据。注意这里的偏移值0000是无用的,我说的0x08010000是因为高16位为0x0801,而后面数据存放的具体低16位要看那个数据的偏移值。
看原文解释:
分析第二行
:1000000010380120AD010108B5010108B302010853
10 表示数据长度16字节
0000 偏移量
00 表示这是数据记录
10380120AD010108B5010108B3020108 具体的数据(这里的数据都是低位在前高位在后)
53 校验
这一行表示将数据存放在基于0x08010000地址,连续16个。其中0x08010就是上面第一行定义的高16位字节值,0000是这里所代表的偏移值
在文件最后的地方,还会有这么两行数据
:040000050801018964
:00000001FF
同样来分析
第一个,直接看类型为05,表示开始线性地址记录,通俗来说就是你main函数的程序入口,具体为0x08010189。大家可以去翻一下自己程序map文件main的地址跟自己hex对比看看
第二个,直接看类型为01,表示标识HEX文件的结尾,看到这个就可以结束读取hex文件了。后面一般也不会再有内容(有也当看不到)
剩下还有数据类型02 03
02 跟 04是差不多的作用。有一点差别就是02表示16位扩展段地址记录用于指定段基址的位4-19
03跟 05也是差不多。
所有的数据类型具体可以看hex格式详解
根据上面整理的内容做了一份hex转bin的程序(C语言,压缩包包含hex格式详解)
积分支持下载(点我)
百度云分享:
链接:https://pan.baidu.com/s/1WeddHCokAVscsDvrM6htCA
提取码:a1b2
有疑问可以评论反馈
hex文件格式解析,hex转bin(C语言)相关推荐
- hex文件格式解析_玩转Hex文件
00 关于Hex Hex文件格式(本文讲的是Intel Hex)是好多好多年以前定义的格式,解析这文件的工具网上搜出来的也是一大摞一大摞的.记住,我们就别瞎折腾自己写一个了哦.我们要学会站在巨人的肩膀 ...
- HEX文件格式解析(转)
Hex格式文件有两种,一种是Intel的Intel HEX,另一种是Motorola(摩托罗拉)的SREC(又称MOT). Intel HEX 文件是由一行行符合Intel HEX 文件格式的文本所 ...
- 单片机进阶 --------hex文件格式
hex文件格式 hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex. 中文名 hex文件格式 所属学科 ...
- S19文件和HEX文件解析
目录 一.S19文件解析: 1.记录类型 2.长度计算 3.地址 4.数据 5.校验和及计算 二.HEX文件解析 1.记录类型 2.起始地址 3.数据长度 4.校验和 一.S19文件解析: S19文件 ...
- c语言解析hex文件格式,HEX文件格式,ihex,hex解析
来自:http://blog.csdn.net/GZFStudy/archive/2008/09/03/2873814.aspx Intel HEX 文件是由一行行符合Intel HEX 文件格式的文 ...
- BIN,S19,M0T,SREC,HEX文件解析;FileParse(二)之源码解析
简介 一.摘要 1.描述 2.关键字 二.为何选择C#解析 三.BIN文件解析 四.BIN文件生成 五.S19,M0T,SREC文件解析 六.S19,M0T,SREC文件生成 七.HEX文件解析 八. ...
- BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解
简介 一.摘要 1.描述 2.关键字 二.为什么要文件解析 三.BIN文件格式 四.S19,M0T,SREC文件格式 五.HEX文件格式 六.源码下载 七.其他 八.参考 一.摘要 1.描述 本文主要 ...
- hex文件格式剖析,以及hex与bin文件互相转换
大家好,我是学电子的小白白. 熟悉单片机开发的朋友,应该经常见到*.hex后缀的文件,它是单片机和嵌入式工程编译输出的一种常见的目标文件格式(比如keil就能编译输出hex文件),通过烧写工具把它下载 ...
- keil将c语言转换成hex文件格式,如何用keil烧写hex文件格式
描述 如何将现成的hex文件用keil烧写 开发单片机的第一步就是用Keil软件编写汇编程序,并形成最终的"*.hex"目标文件,然后用编程器将该文件烧写到单片机中就行了,最后将烧 ...
最新文章
- C++中基类与派生类的构造函数和析构函数
- 柯南变声器的算法实现原理
- Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解
- stm32 无符号整形_十进制字符串转化为无符号整数
- c++ 如何获取移动硬盘型号信息_工程销售,如何高效快速获取项目信息
- html有序列表和无序列表
- Java多线程详解(如何创建线程)
- [20171218]varchar2(4000)如何保存.txt
- 计算机在多媒体领域的应用论文题目,多媒体技术论文题目
- MFC SetTimer函数的用法
- 提高项目39-电子词典
- Magick.NET Crack,支持多种文件格式的综合库
- Redis 增加互斥锁
- 能模仿韩寒小四写作的神奇循环神经网络
- SAP采购中若干价格表的梳理
- php微信商家分账API
- 算法(arithmetic)
- 75道程序员面试逻辑思维题及答案解析
- Window alert() 方法
- 学好编程的 4 个秘诀