C Hex檔案轉Bin檔案

2021-06-17 20:14:52 字數 1417 閱讀 1455

好吧···我接觸到微控制器的一點點東西了

今天要在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,我沒有用到.

streamreader hexreader = new streamreader(「你檔案位址」);

while (true)

if (szline.substring(0, 1) == ":") //判斷第1字元是否是:

if (szline.substring(1, 1) == "1")}}

int32 i;

int32 j = 0;

int32 length = szhex.length;

byte szbin = new byte[length / 2];

for (i = 0; i < length; i += 2) //兩字元合併成乙個16進製制位元組

ELF檔案和BIN檔案

檔案的內容 1.bin檔案是 raw binary 檔案,這種檔案只包含機器碼。2.elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。所以elf檔案的體積比對應的bin檔案要大。檔案的執行 1.執行raw binary很簡單,只需要將程式載入到其起始位址,就...

ELF檔案和BIN檔案

檔案的內容 1.bin檔案是 raw binary 檔案,這種檔案只包含機器碼。2.elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。所以elf檔案的體積比對應的bin檔案要大。檔案的執行 1.執行raw binary很簡單,只需要將程式載入到其起始位址,就...

ELF檔案和BIN檔案

檔案的內容 1.bin檔案是 raw binary 檔案,這種檔案只包含機器碼。2.elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。所以elf檔案的體積比對應的bin檔案要大。檔案的執行 1.執行raw binary很簡單,只需要將程式載入到其起始位址,就...