您的位置:首页 > 数码常识数码常识

用C#代码读取HEX文件中的数据方法(hex文件用什么软件打开)

2025-05-13人已围观

用C#代码读取HEX文件中的数据方法(hex文件用什么软件打开)
  最近工作中需要把HEX中的数据提取出来保存为BIN文件,今天就把我的读取HEX文件的方法分享出来。

  hex文件用什么软件打开

  HEX文件格式是可以烧写到嵌入式芯片中的一种文件格式,一般是通过C或者汇编语言编译后生成,任何的文本编辑软件都可以查看此文件,我一般使用NOTEPAD++。

  整个文件以行为单位,每行以冒号开头,内容全部为16进制

  HEX文件示例

  下面用一个例子来说明:

  :20008000DAF8220261E19010DCEFF0E49005A6F09010E8F09010E3F0E5665407FFBF070464

  第一个20为数据长度,表示后面的数据有32字节。

  紧跟着后面的00 80为地址,表示这行数据在芯片中的保存位置。

  再后面的00为数据类型,类型共分以下几类:

  '00' 有效的数据

  '01' 文件结束

  '02' 扩展段地址记录

  '03' 开始段地址记录

  '04' 扩展线性地址记录

  '05' 开始线性地址记录

  接着00后面的32字节就是数据DAF8220261E19010DCEFF0E49005A6F09010E8F09010E3F0E5665407FFBF0704

  最后一个64是校验码。

  在我多次使用中数据类型只用到了00,04,01,下面是代码示例(由于C#是自学的非常不专业)最大支持512KB的文件读取,并且起始地址是0:

  C#读取HEX文件示例

  byte[] frimwareArray=new byte[512*1024];

  for (int i=0; i < frimwareArray.Length; i++)

  {

  frimwareArray[i]=0xFF;

  }

  StreamReader strFile=new StreamReader(hexfile);

  Int32 hexCounter=0;

  Int32 lineOffset=0;

  string hexLine=string.Empty;

  Int32 hexLineAddress=0;

  Int32 hexLineLen=0;

  hexMaxAddress=0;

  while (strFile.EndOfStream !=true)

  {

  hexLine=strFile.ReadLine();

  if (hexLine.Substring(0, 1)==":")

  {

  if (hexLine.Substring(7, 2)=="00")//有效的数据

  {

  hexLineAddress=HEX2INT32(hexLine.Substring(3, 4)); //截取相对数据地址

  hexCounter=hexLineAddress + lineOffset; //相对数据地址+线性偏移地址==绝对的数据地址

  hexLineLen=HEX2INT32(hexLine.Substring(1, 2)); //获数据的数据长度

  for (int i=0; i < hexLineLen; i++) //读取hex文件中的数据

  {

  frimwareArray[hexCounter++]=(byte)HEX2INT(hexLine.Substring((i * 2) + 9, 2));

  }

  if (hexMaxAddress < hexCounter) //更新最大的hex文件地址

  {

  hexMaxAddress=hexCounter;

  }

  }

  else if (hexLine.Substring(7, 2)=="04")//扩展线性地址记录

  {

  lineOffset=HEX2INT32(hexLine.Substring(9, 4)) * 65536;

  }

  else if (hexLine.Substring(7, 2)=="01")//文件结束

  {

  strFile.Close();

  break;

  }

  }

  else

  {

  strFile.Close();

  MessageBox.Show("Hex file error", "Waring",MessageBoxButtons.OK,MessageBoxIcon.Error);

  break;

  }


  111264
 

很赞哦! ()

随机图文