1、hex文件格式

数据格式如下:

文件有若干行字符串数据,每行都采用如下的固定格式:

MARK | RECLEN | OFFSET | RECTYP | DATA | CHKSUM 。

类型 长度 含义
MARK (起始符) 1byte 以”:“作为固定起始符
RECLEN 1byte 长度位,表示有效数据的总长度
OFFSET 2byte 数据的起始地址
RECTYP 数据类型 见数据类型定义
DATA,CHKSUM (len+1) byte 有效数据+1byte校验值

数据类型定义:

04,表示扩展地址记录

00,表示数据记录,真正的有效数据

01,文件结束标志

05,扩展地址记录

实际报文如下:

1.1、文件起始位置

1.2、文件结尾位置

2、hex与bin文件的关系

相比之下,bin文件就只有纯数据,如果做OTA需要事先知道起始地址。

2.1 文件长度关系

由于需要实现进度条功能,需要获取hex的有效长度,但是又不想去遍历一遍,可以由如下关系得到一个大致的长度。

分析:

1、hex文件中的有效数据基本以16个字节为单位(因为是字符串所以实际长度是32);

2、hex文件中有效数据的每一行的数据长度为45(包括\r\n);

那么,就可以用总长度除以45得到行数,行数再乘以16得到大致的数据长度

3、C#实现读取

3.1 bin文件处理

bin文件处理非常简单,用c#的IO流接口,读取字节流即可。

一次读取256字节,读取到的数据小于256或等于0时判断为读取结束。

FileStream fs = File.OpenRead(strPath);
read_num = fs.Read(bytes, 0, 256);
fs.Close();

3.2 hex文件处理

hex文件,有一点点麻烦,利用StreamReader接口完成(从字节流中读取字符)。

由于数据按行存储,正好一次读取一行,每次读取256字节,直到读取结束和读取为空。

StreamReader streamReader = new StreamReader(strPath);
while (true)
{string sLine = streamReader.ReadLine();if (sLine == null)break;else if (sLine.Substring(0, 1) == ":" && sLine.Substring(7, 2) == "00"){for (int i = 0; i < Int32.Parse(sLine.Substring(1, 2), System.Globalization.NumberStyles.HexNumber); i++){if (read_num < 256)//256|255|257{bytes[read_num] = (byte)Int32.Parse(sLine.Substring(2 * i + 9, 2), System.Globalization.NumberStyles.HexNumber);read_num++;}}if (read_num == 256){break;}}else if (sLine.Substring(1, 8) == ":00000001"){break;}
}
streamReader.Close();

hex和bin文件的区别和读取相关推荐

  1. HEX和BIN文件的区别

    上一篇文章中演示的是裸板开发过程中可能遇到的两个问题的解决办法. 1,是在keil中编写程序并编译连接成可以下载到开发板的  .hex 文件,然后用jlink仿真器下载:2,是在ubuntu中编写编译 ...

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

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

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

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

  4. STM32烧录HEX、BIN文件,使用ST-LINK

    安装ST提供的烧录软件 STM32 ST-LINK Utility.下载 将STM32设备的 SWDIO.SWCLK.3V3.GND 与 ST-LINK 相连.(大多数情况下不需要连接RESET,如果 ...

  5. KEIL的hex与bin文件自动生成到指定目录

    由于每次生成查找HEX BIN文件不方便,借鉴网上的文章拼出了下面的BAT文件,分享一下 使用方法见注释 :: @File Name: HEXBIN.bat :: @Version : 1.0 :: ...

  6. linux中rpm.bin文件与bin文件的区别

    linux中rpm.bin文件与bin文件的区别 rpm.bin 你执行后会生成rpm打包的安装文件 你就可以使用命令 rpm -ivh xxx.rpm 来安装了 只能在redhat系的发行版上使用 ...

  7. 利用Jlink给stm32系列单片机下载Hex和Bin文件

    多数时候我们下载程序都是在IDE里面,利用源码编译下载.可有时候我们手上只有别人给的已经编译好的文件,或者做一些IAP实验的时候,这种方法就不适用了.在这里介绍一下怎么利用Jlink驱动自带的软件Jf ...

  8. hex文件和bin文件的区别和联系

    1.分析一下hex文件 HEX格式文件以行为单位,每行由":"(16进制为:0x3a)开始,以回车键结束(16进制为:0x0d,0x0a).行内的数据都是由两个字符表示一个16进制 ...

  9. (转载)在IAR及MDK里生成hex及bin文件的标准方法

    在IAR及MDK中生成bin及hex文件的设置方法: IAR里面---> 生成bin文件:    (1)在options->linker ->output->other选中-& ...

最新文章

  1. 咏南中间件+开发框架支持最新的DELPHI XE10.1(BERLIN) UPDATE1
  2. 【转】PB实现在通知区域添加图标
  3. android读取excel文件_python里读写excel等数据文件的几种常用方式
  4. PyTorch中的梯度微分机制
  5. Java Web基础回顾 —JQuery DOM
  6. 聊聊索引失效的10种场景,巨坑
  7. 音视频 TS格式解析
  8. 用html写的意见调查表代码
  9. Office 2010 安装过程中出错
  10. 三维重建——D2HC-RMVSNet网络详解
  11. 汶川大地震引起最近全国人民心理一定程度的恐慌问题
  12. 游戏运行报错Exception EAccessViolation in module
  13. vios映射_以最低要求映射VIOS LUN
  14. centos8启动kafka及kafka相关命令汇总
  15. Excel如何快速批量生成指定性别的随机姓名
  16. Boost.Locale 之字符转换 gbk utf8 big5 string wstring等
  17. 2021据大数据调查-中国的程序员数量是否已经饱和或者过剩?(图多,建议收藏!)
  18. 关于babel配置使用可选链
  19. web应用使用skype教程
  20. 博途v15程序监视无法使用_西门子博图软件如何监视PLC程序?

热门文章

  1. js vue 前端代码混淆webpack-obfuscator
  2. 大数据知识面试题-MapReduce和YARN(2022版)
  3. ABAP学习笔记之——第三章:OPEN SQL和NATIVE SQL
  4. 编程命名很麻烦,自己造了个编程命名助手Code Name
  5. 登鹳雀楼(网页设计代码)
  6. apk文件反编译成android代码
  7. hyperterminal使用教程_HyperTerminal超级终端 V3.0.2 Win10中文版
  8. 代码管理--svnadmin工具介绍
  9. 高校安消一体智慧应用平台建设方案
  10. 容天服务器显示器没输出,电脑启动显示器无输出画面怎么办