来自:http://blog.csdn.net/GZFStudy/archive/2008/09/03/2873814.aspx

Intel HEX 文件是由一行行符合Intel HEX 文件格式的文本所 构 成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记录 。 这 些 记录 由 对应 机器 语 言 码 和/ 或常量 数 据的十六 进 制 编码数 字 组 成。Intel HEX 文件通常用于 传输将 被存于ROM 或者EPROM 中的程序和 数 据。大多 数 EPROM 编 程器或模 拟器使用Intel HEX 文件。 记录 格式Intel HEX 由任意数量的十六 进 制 记录组 成。每 个记录 包含5 个 域, 它们按以下格式排列::llaaaatt[dd...]cc 每一组字母 对应 一 个 不同的域,每一 个 字母 对应 一 个 十六 进 制 编码 的 数 字。每一 个 域由至少 两个 十六 进 制 编码数 字 组 成, 它们构 成一 个 字 节 ,就像以下描述的那 样:

: 每个Intel HEX 记录 都由冒 号开头 .

ll 是 数 据 长 度域, 它 代表 记录当 中 数 据字 节 (dd) 的 数量 .

aaaa 是地址域, 它代表 记录当 中 数据的起始地址 .

tt 是代表HEX 记录类 型的域 , 它 可能是以下 数 据 当 中的一 个:

00 – 数 据 记录

01 – 文件结 束 记录

02 – 扩展段地址 记录

04 – 扩展 线 性地址 记录

dd 是数 据域 , 它 代表一 个 字 节 的 数 据. 一 个记录 可以有 许 多 数 据字 节 . 记录当 中 数 据字 节 的 数 量必 须 和 数 据 长 度域(ll) 中指定的 数字相符.

cc 是校验 和域 , 它 表示 这个记录 的校 验 和. 校 验 和的 计 算是通 过将记录当 中所有十六 进 制 编码数 字 对 的 值 相加, 以256 为 模 进 行以下 补 足.

表示为:“:[1字节长度][4字节地址][1字节记录类型][数据段][校验和] ”

数 据 记录

Intel HEX文件由任意数 量以回 车换 行符 结 束的 数 据 记录组 成. 数 据 记录 外 观如下:

:10246200464C5549442050524F46494C4500464C33 其中:

10 是这个记录当中 数 据字 节 的 数量.即0x10

2462 是数据 将 被下 载 到存 储 器 当中的地址.即0x2462

00 是记录类型( 数 据 记录).即0x00

464C…464C是 数据.分别代表0x46,0x4C...

33 是这个记录的校 验和.即0x33

扩展 线 性地址 记录(HEX386)

扩 展 线 性地址 记录 也叫作32 位地址 记录 或HEX386 记录 . 这 些 记录 包含 数 据地址的高16 位. 扩 展 线 性地址 记录总 是有 两个数 据字 节 , 外 观如下:

:02000004FFFFFC 其中:

02 是这个记录当中 数 据字 节 的 数量.

0000 是地址域, 对于 扩 展 线 性地址 记录 , 这个 域 总是0000.

04 是记录类型04( 扩 展 线 性地址 记录)

FFFF 是地址的高16 位.

FC 是这个记录的校 验 和, 计算方法如下:

01h + NOT(02h + 00h + 00h + 04h + FFh + FFh). 当一 个扩 展 线 性地址 记录 被 读 取, 存 储 于 数 据域的 扩 展 线 性地址被保存, 它 被 应 用于 从 Intel HEX 文件 读 取 来 的 随 后的 记录 . 线 性地址保持有效, 直到 它 被另外一 个扩 展地址 记录 所改 变.

通 过 把 记录当 中的地址域 与 被移位的 来 自 扩 展 线 性地址 记录 的地址 数 据相加 获 得 数 据 记录 的 绝对 存 储器地址. 以下的例子演示了这个过 程.. 来自 数 据 记录地址域的地址2462 扩展 线 性地址 记录 的 数据域+ FFFF

------------ 绝对存 储 器地址FFFF2462

扩 展段地址 记录(HEX86)

扩 展段地址 记录 也叫HEX86 记录 , 它 包括4-19 位 数 据地址段. 扩 展段地址 记录总 是有 两个数 据字 节 , 外 观如下:

:020000021200EA 其中:

02 是记录当中 数 据字 节 的 数量.

0000 是地址域. 对于 扩 展段地址 记录 , 这个 域 总是0000.

02 是记录类型02( 扩 展段地址 记录)

1200 是地址段.

EA 是这个记录的校 验 和, 计算方法如下:

01h + NOT(02h + 00h + 00h + 02h + 12h + 00h). 当一 个扩 展段地址 记录 被 读 取, 存 储 于 数 据域的 扩 展段地址被保存, 它 被 应 用于 从 Intel HEX 文件 读 取 来 的 随 后的 记录 . 段地址保持有效, 直到 它 被另外一 个扩 展地址 记录 所改 变.

通 过 把 记录当 中的地址域 与 被移位的 来 自 扩 展段地址 记录 的地址 数 据相加 获 得 数 据 记录 的 绝对 存 储器地址. 以下的例子演示了这个过 程.. 来自 数 据 记录地址域的地址2462 扩展段地址 记录数据域+  1200

--------- 绝对存 储 器地址00014462

文件 结 束(EOF) 记录

Intel HEX文件必须 以文件 结 束(EOF) 记录结 束. 这个记录 的 记录类 型域的 值 必 须 是01.EOF 记录 外 观总是如下:

:00000001FF 其中:

00 是记录当中 数 据字 节 的 数量.

0000 是数据被下 载 到存 储 器 当 中的地址. 在文件 结 束 记录当 中地址是 没 有意 义被忽略的.0000h 是典型的地址.

01 是记录类型01( 文件 结 束 记录)

FF 是 这个记录 的校 验 和, 计算方法如下:

01h + NOT(00h + 00h + 00h + 01h).

Intel HEX 文件例子: 下面是一个 完整的Intel HEX 文件的例子:

:10001300AC12AD13AE10AF1112002F8E0E8F0F2244

:10000300E50B250DF509E50A350CF5081200132259

:03000000020023D8

:0C002300787FE4F6D8FD7581130200031D

:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016

:04003F00A42EFE22CB

:00000001FF

//追加一段

//-------------贴一段解析的c语言,这才是精华-------------------

int ParseIHexPerLine(const char *buf,const char *path,int line)

{

unsigned int nbytes=0,addr=0,type=0,i,val,line_chksum;

unsigned char data[1024];

unsigned char cksum;

const char *s=buf;

if(*s!=':') //第一个为冒号

{

fprintf(stderr,"%s:%s: format violation (1)/n",path,line);

return(1);

}

++s;

//接下来的8个字节为数据大小、地址等

if(sscanf(s,"%02x%04x%02x",&nbytes,&addr,&type)!=3)

{

fprintf(stderr,"%s:%s: format violation (2)/n",path,line);

return(1);

}

s+=8;

//读到的类型

if(type==0) //为数据段

{

if(!(nbytes>=0 && nbytes<1024))

{

perror("nbyte per line unsupport/n");

return(-1);

}

cksum=nbytes+addr+(addr>>8)+type;

//

for(i=0; i

{

val=0;

if(sscanf(s,"%02x",&val)!=1)

{

fprintf(stderr,"%s:%s: format violation (3)/n",path,line);

return(1);

}

s+=2;

data[i]=val;

cksum+=val;

}

//

line_chksum=0;

if(sscanf(s,"%02x",&line_chksum)!=1)

{

fprintf(stderr,"%s:%s: format violation (4)/n",path,line);

return(1);

}

if((cksum+line_chksum)&0xff)

{

fprintf(stderr,"%s:%s: checksum mismatch (%u/%u)/n",

cksum,line_chksum);

return(1);

}

if(WriteRAM(addr,data,nbytes))

return(1);

}

else if(type==1)

{

// EOF marker. Oh well, trust it.

return(-1);

}

else

{

fprintf(stderr,"%s:%s: Unknown entry type %d/n",type);

return(1);

}

return(0);

}

c语言解析hex文件格式,HEX文件格式,ihex,hex解析相关推荐

  1. 【转】hex和bin文件格式的区别

    hex和bin文件格式的区别 Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量.Intel HEX文件经 ...

  2. hex文件格式剖析,以及hex与bin文件互相转换

    大家好,我是学电子的小白白. 熟悉单片机开发的朋友,应该经常见到*.hex后缀的文件,它是单片机和嵌入式工程编译输出的一种常见的目标文件格式(比如keil就能编译输出hex文件),通过烧写工具把它下载 ...

  3. hex和bin文件格式区别

    1.hex介绍 Hex 全称 (Intel HEX)文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件.在Intel HEX文件中,每一行包含一个HEX记录.这些记录由对应机 ...

  4. hex和bin文件格式

    Hex文件,这里指的是Intel标准的十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示.具体格式介绍如下: Intel hex 文件格式 Intel hex 文件常 ...

  5. 有关IAP使用HEX或BIN文件格式的探讨

    有关IAP使用HEX或BIN文件格式的探讨 BIN优点,下载时二进制传输效率高,一个起始地址和长度(均可事先知道)搞定.因起始地址和长度在 下载一开始就可以知道,所以只需要擦除实际代码大小的FLASH ...

  6. bin、hex、elf、axf文件解析

    冰冻三尺非一日之寒,滴水穿石非一日之功 文章目录 引言 文件分类 1.bin文件 2.hex文件 3.axf文件 4.elf文件 总结 参考资料:深度理解编译过程 参考资料:深度理解编译文件 引言 b ...

  7. 将两个HEX文件合并成一个HEX文件

    将两个HEX文件合并成一个HEX文件 文章目录 将两个HEX文件合并成一个HEX文件 系统环境 1. 生成BootLoader和app的HEX文件 2. 将两个HEX文件合并成一个HEX 3. 利用J ...

  8. C语言计算日期间隔天数的经典算法解析

    C语言计算日期间隔天数的经典算法解析 网上看到一个计算日期间隔的方法,很高深,很巧妙.代码如下: #include <stdio.h> #include <stdlib.h> ...

  9. android打开hex文件怎么打开,hex文件扩展名,hex文件怎么打开?

    .hex 文件类型1:BinHex Encoded File 文件说明:File encoded with an early version of BinHex (binary-to-hexadeci ...

  10. 2023-03-18青少年软件编程(C语言)等级考试试卷(一级)解析

    2023-03-18青少年软件编程(C语言)等级考试试卷(一级)解析 T1.字符长方形 给定一个字符,用它构造一个长为4个字符,宽为3个字符的长方形,可以参考样例输出. 时间限制:1000 内存限制: ...

最新文章

  1. 截断坐标轴参数的应用小例子
  2. 研究人员利用非线性原理为机器人创造出类似昆虫的步态,脑机接口也可以使用...
  3. android handler 主线程吗,[android开发]非主线程进行handler操作
  4. SQL基础使用入门(二): DML语句和DCL语句
  5. SpringBoot AOP完全讲解二:统一处理请求日志
  6. VTK:可视化算法之FlyingHeadSlice
  7. OpenCV添加图像轨迹轨迹条 Adding Images Trackbar的实例(附完整代码)
  8. Flink SQL Client中的session window图解
  9. 带旋treap概念及模板,带例题:普通平衡树
  10. Repeater的嵌套
  11. 赞,全网开发者都在学的 26 门 AI 课程!
  12. TDEngine游戏平台框架逻辑
  13. Day15Day16多任务和任务切换
  14. Windows上提升舒适度的好物分享(没恰饭)
  15. imindmap思维导图免费下载
  16. 游戏公司游戏策划面试笔记
  17. Android Studio第11课网络编程3(学习打卡Day17)
  18. 在小鸟云进行服务器托管,怎么升级配置?
  19. 很酷的瞄准镜样式光标效果
  20. 国内电商系统为什么要以ThinkPHP为核心开发

热门文章

  1. 苹果cmsv10好看的七色中文二开视频免费模板
  2. Jfinal engin 集成shiro标签支持
  3. java实习生简历模板
  4. IndexedDB数据库
  5. 关于C++的内存管理
  6. basler相机参数简要中文说明_basler设置相机参数
  7. H. 知识图谱 知识问答
  8. java人民币大小写转换_人民币大小写转换 java 实现
  9. 云计算介绍 TCP/IP协议以及配置
  10. 【2020年APP-Flutter混合开发之路】01 - Flutter的初步思考和开发部署