# C 語言編寫二進位制/十六進位制編輯器
基礎知識
計算機中表示資訊的最小單位是 bit(位),而用來儲存資料的最小單位是 Byte(位元組)。因為儲存資料的最小單位是位元組,所以檔案長度不存在 4bit 或者 1bit 這種表示。
編寫十六進位制編輯器
資料視覺化
每次從檔案讀取 8bit 資料儲存在 unsigned char 型別中,用 printf() 的 %x 引數列印;如果你想列印資料的二進位制形式,只需對 unsigned char 型別資料進行八、十或十六進位制轉二進位制字串在列印即可。
資料編輯
表面上我們的資料儲存在 unsigned char 型別中,編輯的最小單位因該是 unsigned char,如果我們想修改其中任意一位(bit),該如何操作呢?我們舉個例子:
二進位制 0000 0000 的高位設定為 1 該怎麼辦? 二進位制 0000 0000 的十六進位制表示為 0; 二進位制 1000 0000 的十六進位制表示為 80; 所以只要將十六進位制 80 存入檔案,便高位設定為了 1。
解析檔案差異對比工具
檔案儲存的最小單位是位元組(Byte),不存在 4bit 或者 1bit 這種表示。我們可以每次從檔案讀取 8bit 資料儲存在 unsigned char 型別中,然後再相互比較兩個資料即可。
二進位制資料用十六進位制的方式表示,是因為十六進位制最大值 F 剛好儲存在 4bit 中,兩個十六進位制數就佔用 1Byte 的空間。直觀方便易於查閱和修改。旁邊的 ASCII 字元區更多是用來輔助閱覽和編輯的。
我建立了兩個檔案,分別各寫入一個 int 值,下圖是檔案差異:
兩個 int 的值是完全不同的,但他們的差異僅僅只有 1Byte 而已。也就是說這兩個檔案在磁碟中實際上只有一個位元組不同而已。
我向 b.bin 寫入的資料。(a.bin 寫入的是變數 a)
b.c 檔案是 HxD 匯出的二進位制資料。
這是將 unsigned char rawData[] 寫入檔案(c.bin)後再讀取的結果。 也就是說所謂型別對計算機而言是不存在的。
你可能注意到 HxD 的結果為 00 FF FF FF 我的結果為 FF FF FF 00,原因在於我列印的是 int 型資料的十六進位制形式。
轉載於:https://my.oschina.net/bbi094/blog/703283