天天看點

二進制檔案和ASCII檔案有何差別

二進制檔案和ascii檔案(即文本檔案)的差別,對于和計算機親近時間尚短的同學是個難題。本文用簡單的例子,試圖展示其中的道道,希望能對菜鳥們有些幫助。

  有程式:

  運作結果:

  c=100000

  n=100000

  c和n的輸出看起來是一樣的,那兩者真的一樣嗎?

  顯然不是一回事。

  

二進制檔案和ASCII檔案有何差別

  (注:要将待觀察的資料以二進制形式顯示出來,方法見本文附注部分。)

  字元串的c占用了8個位元組,儲存的是:1個'1'(ascii碼為49,二進制110001)、5個'0'(ascii碼為48,二進制110000),最後2個位元組為'\0'(ascii碼為0)

  而整型的n,用4個位元組(可以将圖中二進制1 1000 0110 1010 0000轉成十進制,正好100000。本來4位元組32位,前面的0省略了。)

  重點品味一下n。n在記憶體中用4位元組表示,那樣一種形式,對掌握計算機内部機制的人不是回事,但對和計算機尚做不到十分親近的人而言,32位的資料就是#@!#!@#...。當程式中用cout<<n的方式顯示n值時,給出的是100000。可敬的cout!

  實際上,cout輸出過程中,計算機已經給我們做了轉換:将n的二進制内部表示,轉換成了人樂于看到的字元形式。

  運作這一段程式,是将n輸出到ascii檔案a.dat中。

  檔案可以用記事本打開,如圖:

二進制檔案和ASCII檔案有何差別

  顯然,ascii檔案中表示n時,也是“看起來”的樣子,而不是n在記憶體裡的實際表示形式

  運作這一段程式,是用對二進制檔案寫入的方式,将n輸出到檔案b.dat中。

  用記事本打開b.dat檔案,如圖:

二進制檔案和ASCII檔案有何差別

  納尼?這是個神馬字?你會念嗎?開什麼玩笑!

二進制檔案和ASCII檔案有何差別

  用binaryviewer也看一下a.txt——前文中另一個也是儲存100000的檔案,隻不過,是ascii檔案。檢視結果是:

二進制檔案和ASCII檔案有何差別

  檔案共有8位元組,前面的6個位元組,儲存的是:1個'1'(ascii碼為49,十六進制31)、5個'0'(ascii碼為48,十六進制30)。

  由此可以看出二進制檔案和ascii檔案的差別:前者,用和記憶體中一樣的方式儲存資料;而後者,用和cout顯示一樣的方式儲存,存的是人“看起來”的那個樣子。

  不友善人看的二進制檔案實際上效率更高,用途更廣,初學程式設計的童鞋,不要錯過學會它的機會。

  在待觀察的變量上擊滑鼠右鍵,選“properties”,如下圖

二進制檔案和ASCII檔案有何差別

  在“format”部分,如下圖選擇“binary”後,點選“ok”。

二進制檔案和ASCII檔案有何差別