• C# Hex文件转bin文件


    好吧···我接触到单片机的一点点东西了

    今天要在web上面做一个对硬件的远程升级,给我的是bin文件或者是Hex文件,傻了没搞过,发现读bin不太会搞,读Hex是Ascii码然后转哈哈
     首先需要了解以下HEX的文件信息:
      Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用

     

    于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。
      HEX格式文件以行为单位,每行由":"(0x3A)开始,以回车键结束(0x0D,0x0A)。行内的数据都是由两个字符表示一个16进制字节,比如"01"就表示数0x01;"0A"就

     

    表示0x0A。对于16位的地址, 则高位在前低位在后, 比如地址0x010A,在HEX格式文件中就表示为字符串"010a". 下面为HEX文件中的一行:
     :10000000FF0462FF051EFF0A93FF0572FF0A93FFBC
     : 号表示一行的开始
     : 后的第1, 2个字符表示本行包含的数据的长度,这里就是0x10即16个.
     : 后的第3, 4, 5, 6个字符表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。
     : 后的第7, 8个字符表示数据的类型
      00 ----数据记录       
      01 ----文件结束记录
      02 ----扩展段地址记录
      04 ----扩展线性地址记录

     

     这里就是0x00即为普通数据记录。
     自后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。
     最后两个字符表示校验码。
     
     每个HEX格式的最后一行都是固定为:
     :00000001FF

     

     以上的信息其实就足够进行HEX转BIN格式的程序的编写。
     我只处理数据类型为0x00及0x01的情况。0x02, 0x04表示对应的存储地址超过了64K,我没有用到.

    C#代码

     StreamReader HexReader = new StreamReader(“你文件地址”);
                    
                    while (true)
                    {
                        szLine = HexReader.ReadLine(); //读取一行数据
    
                        if (szLine == null) //读完所有行
                        {
                            break;
                        }
                        if (szLine.Substring(0, 1) == ":") //判断第1字符是否是:
                        {
    
                            if (szLine.Substring(1, 8) == "00000001")//数据结束
                            {
                                break;
                            }
                            if (szLine.Substring(1, 1) == "1")
                            {
                                szHex += szLine.Substring(9, szLine.Length - 11); //读取有效字符:后0和1
                            }
    
                           
                        }
    
                    }
                    Int32 i;
                    Int32 j = 0;
                    Int32 Length = szHex.Length;
                    byte[] szBin = new byte[Length / 2];
                    for (i = 0; i < Length; i += 2) //两字符合并成一个16进制字节
                    {
                        szBin[j] = (byte)Int16.Parse(szHex.Substring(i, 2), NumberStyles.HexNumber);
                        j++;                    
                    }

    szBin为最后结果

  • 相关阅读:
    对软件工程课程的期望
    自我介绍
    新目标
    课后作业-阅读任务-阅读笔记-4
    20150914-构建之法:现代软件工程-阅读笔记
    团队编程项目作业2-团队编程项目开发环境搭建过程
    团队编程项目作业2-团队编程项目设计文档
    个人-GIT使用方法
    结对编程项目作业2-结对编项目设计文档
    结对编程项目作业2-开发环境搭建过程
  • 原文地址:https://www.cnblogs.com/bulege/p/2469787.html
Copyright © 2020-2023  润新知