計算機中表示信息的最小單位是 bit(位),而用來存儲數據的最小單位是 Byte(字節)。由於存儲數據的最小單位是字節,因此文件長度不存在 4bit 或者 1bit 這種表示。編輯器
每次從文件讀取 8bit 數據存儲在 unsigned char 類型中,用 printf() 的 %x 參數打印;若是你想打印數據的二進制形式,只需對 unsigned char 類型數據進行8、十或十六進制轉二進制字符串在打印便可。工具
表面上咱們的數據存儲在 unsigned char 類型中,編輯的最小單位因該是 unsigned char,若是咱們想修改其中任意一位(bit),該如何操做呢?咱們舉個例子:圖片
二進制 0000 0000 的高位設置爲 1 該怎麼辦? 二進制 0000 0000 的十六進制表示爲 0; 二進制 1000 0000 的十六進制表示爲 80; 因此只要將十六進制 80 存入文件,便高位設置爲了 1。字符串
文件存儲的最小單位是字節(Byte),不存在 4bit 或者 1bit 這種表示。咱們能夠每次從文件讀取 8bit 數據存儲在 unsigned char 類型中,而後再相互比較兩個數據便可。it
二進制數據用十六進制的方式表示,是由於十六進制最大值 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 型數據的十六進制形式。