hex文件和bin文件区别

HEX文件和BIN文件是我们经常碰到的2种文件格式。因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的IAP更新,其中要考虑HEX文件和BIN文件,所以需要学习下这两种文件。下面是最近的我的了解,如有不对地方还请指正。

  • HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身

在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。

  • HEX文件格式

HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。以下为记录(Record)的具体格式:

 Record structure
  A record (line of text) consists of six fields (parts) that appear in order from left to right:

  1. Start code, one character, an ASCII colon ‘:‘.
  2. Byte count, two hex digits, indicating the number of bytes (hex digit pairs) in the data field. The maximum byte count is 255 (0xFF). 16 (0x10) and 32 (0x20) are commonly used byte counts.
  3. Address, four hex digits, representing the 16-bit beginning memory address offset of the data. The physical address of the data is computed by adding this offset to a previously established base address, thus allowing memory addressing beyond the 64 kilobyte limit of 16-bit addresses. The base address, which defaults to zero, can be changed by various types of records. Base addresses and address offsets are always expressed as big endian values.
  4. Record type (see record types below), two hex digits, 00 to 05, defining the meaning of the data field.
  5. Data, a sequence of n bytes of data, represented by 2n hex digits. Some records omit this field (n equals zero). The meaning and interpretation of data bytes depends on the application.
  6. Checksum, two hex digits, a computed value that can be used to verify the record has no errors.

看个例子:

     :020000040000FA
     :10000400FF00A0E314209FE5001092E5011092E5A3
     :00000001FF   

  对上面的HEX文件进行分析:

  第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基地址。
  第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.
  第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识文件的结尾。
  
        在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4。

  • BIN文件格式

对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。

  • HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符‘3‘和字符‘F‘,每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。

对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件 大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。

原文地址:https://www.cnblogs.com/lixuejian/p/10711908.html

时间: 2024-08-01 16:40:47

hex文件和bin文件区别的相关文章

PHP hex文件及bin文件读取

背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是hex和bin这两种. 一 hex文件读取 1 首先我们需要了解hex文件内容格式 (图及下面说明来自网络,侵权必删) :(冒号)每个Intel HEX 记录 都由冒 号开头 : LL 是 数 据 长 度域, 它 代表 记录当 中 数 据字 节 (dd) 的 数量 : aaaa 是地址域, 它代表 记录当 中 数据的起始地址: TT是代表HEX 记录类 型的域 , 它 可能是以下 数 据 当 中的一 个: 00 – 数 据 记录(

HEX文件和BIN文件格式的区别

在单片机开发中HEX文件和BIN文件是非常常见的烧写文件格式,以常用开发环境Keil为例,分别创建HEX和BIN文件,比如: 1.创建HEX:在Keil里面可以通过勾选[魔法棒>Output>Creat HEX File]让工程输出HEX文件. 2.创建BIN:在Keil中在[魔法棒>User>After Build/Rebuild]标签下勾选Run #1,同时在其对应的User Command文本框中输入 fromelf --bin [email protected] !L 编译

bin文件转换为hex文件C语言实现

对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成了hex文件.那bin文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下: 最通俗的来讲,hex是带地址的,用下载器下载时,不需要设置偏移地址,它是文件流格式的,都是标准的ASCII码.而bin文件是不带地址的,全部是二进制数据流,打住一下,其实就是我们所谓的机器代码.有兴趣的同学,可以尝试着用反汇编,得到的就是汇编代码了.我所用的开发板S3C2440

C# 读写十六进制bin 文件

读一个十六进制的bin文件,在bin文件添加四行头,生成新的bin文件.bin文件可以用vs打开查看. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Ta

002_STM32学习笔记:【针对开发板】BIN文件通过ST-LINK烧录STM32芯片

由于本人所持的开发板STM32F429-DIS上面带有了ST-LINK下载烧录部分,而且这个型号的开发板在embed上也获得支持. 烧录文件:BIN文件 烧录方式:ST-LINK 烧录芯片:STM32F429I 烧录准备: 1.开发板自带的一根USB线 2.官方烧录软件:STM32 ST-LINK utility(下载需要登录账号) ================= 具体步骤: 1.安装烧录软件,后打开. 2.连接好开发板到电脑. 3.Target --> Connect (成功的结果) 4.

hex文件快速转换为bin文件

我在stm32下面做信号分析,经常要将sram里的内存信号数据转为hex,又通过hex2bin.exe这个网上现成的转换软件进行转换为bin文件,这样数据才能在PC机器上做分析.每次都要在控制台下,输入转换命令,非常麻烦.于是就想到能不能直接对hex文件进行转换. 很容易想到在文件夹选项中设置对hex文件关联的程序,但直接使用hex2bin.exe ,由于它需要输入三个参数,默认只能使用一个参数,况且hex2bin对于输入参数有些要求,如文件名的长度不能超过8.没办法,我自己再写了一个控制台程序

java 实现hex文件转换bin保存至内存中

hex 文件的格式,以文件中某一行字符串(16进制)为例: :10 0830 00 020C5D0224B3FFFFFFFFFFFFFFFFFFFF 7E 10,长度,转换成10进制,也就是16B 大小,这里是32个字符,因为16进制中,2个字符占一个字节,可以不管. 0830,地址,转换成10进制好计算,数据存入字节数组时,可以当做数组下标来使用,方便计算两个地址间的差值. 00,这里表示数据记录,还有其他类型百度便知,可以不管. 02...FF,数据部分.主要就是把这一部分转成bin文件.

使用keil生成bin文件

相关文件  下载http://pan.baidu.com/share/link?shareid=478269&uk=1107426113 使用kei自带的工具的话是 打开Options for Target 对话框,选择User标签页: 勾选Run User Programs After Build/Rebuild框中的Run #1多选框. UV3版本在文本框输入C:/Keil/ARM/BIN31/fromelf.exe --bin -o ./test.bin ./test.axf命令行: UV

Keil如何生成bin文件【Keil生成Bin文件的方法】

使用过Keil的同鞋都知道,现在Keil中默认可以输出.axf的调试文件和可以通过钩选输出的.hex可执行文件,没有bin(二进制)文件的输出选项.可是偏偏某些时候需要或者习惯性的使用.bin文件来进行烧写,下面各举一例: 1. 一直使用ADS的用户习惯性的使用.bin文件: 2. 某些烧写器带的应用软件只支持.bin文件: 3. 正如笔者遇到的情况,我在使用STM32公司提供的网络更新固件程序的例程时,需要用到.bin文件(.hex文件通过网络更新后遇到某些问题,而且用Hex2Bin软件转换后