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為最后結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM