电脑装配网

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

 人阅读 | 作者奔跑的小羊 | 时间:2023-04-03 17:27

最近工作中需要把HEX中的数据提取出来保存为BIN文件,今天就把我的读取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;

}


文章标签:

本文链接:『转载请注明出处』