二進位制檔案和文字檔案的區別

2021-08-11 06:25:37 字數 2971 閱讀 7443

原文**:

一、文字檔案與二進位制檔案的定義

將檔案看作是由乙個乙個位元組(byte) 組成的,那麼文字檔案中的每個位元組的最高位都是0,也就是說文字檔案使用了乙個位元組中的七位來表示所有的資訊,而二進位制檔案則是將位元組中的所有位都用上了。這就是兩者的區別;

接著,第二個問題就是檔案按照文字方式或者二進位制方式開啟,兩者會有什麼不同呢?其實不管是二進位制檔案也好,還是文字檔案也好,都是一連串的0和1,但是開啟方式不同,對於這些0和1的處理也就不同。如果按照文字方式開啟,在開啟的時候會進行translate,將每個位元組轉換成ascii碼,而按照二進位制方式開啟的話,則不會進行任何的translate;

最後就是文字檔案和二進位制檔案在編輯的時候,使用的方式也是不同的。譬如,你在記事本中進行文字編輯的時候,你進行編輯的最小單位是位元組(byte);而對二進位制檔案進行編輯的話,最小單位則是位(bit),當然我們都不會直接通過手工的方式對二進位制檔案進行編輯了。

二進位制檔案和文字檔案都是0,1組成,但檔案系統對他們的解釋不一樣,一般系統呼叫(或win32api)都會分為字元式和二進位制式(或流式).文字或字元檔案代表慢速裝置,而二進位制檔案代表可以大塊資料操作的快速外設,二進位制檔案內容基本無意義,系統對它不加解釋地傳給呼叫者,解釋由呼叫者負責.而對字元檔案,系統把他理解為單位元組的ascii或多位元組的unicode字串,並且對其中的特殊字元(如回車等)加以特殊處理.所以同乙個檔案,可以使用不同型別的系統呼叫.s

從本質上來說他們之間沒有什麼區別,因為他們在硬碟上都有一種的存放方式--二進位制,但是如果要對他們有些區分的話,那可以這樣理解。我們現在的每個字元由乙個或多個位元組組成,每個位元組都是用的-128—127之間的部分數值來表示的,也就是說,-128——127之間還有一些資料沒有對應任何字元的任何位元組。如果乙個檔案中的每個位元組的內容都是可以表示成字元的資料,我們就可以稱這個檔案為文字檔案,可見,文字檔案只是二進位制檔案中的一種特例,為了與文字檔案想區別,人們又把除了文字檔案以外的檔案稱為二進位制檔案,由於很難嚴格區分文字檔案和二進位制檔案的概念,所以我們可以簡單地認為,如果乙個檔案專門用於儲存文字字元的資料,沒有包含字元以外的其他資料,我們就稱之為文字檔案,除此之外的檔案就是二進位制檔案。

從檔案編碼的方式來看,檔案可分為ascii碼檔案和二進位製碼檔案兩種。

asc碼:  00110101 00110110 00110111 00111000

↓     ↓    ↓    ↓

十進位製碼: 5     6    7    8 共占用4個位元組。ascii碼檔案可在螢幕上按字元顯示, 例如源程式檔案就是ascii檔案,用dos命令type可顯示檔案的內容。 由於是按字元顯示,因此能讀懂檔案內容。

二進位制檔案是按二進位制的編碼方式來存放檔案的。 例如, 數5678的儲存形式為: 00010110 00101110只佔二個位元組。二進位制檔案雖然也可在螢幕上顯示, 但其內容無法讀懂。c系統在處理這些檔案時,並不區分型別,都看成是字元流,按位元組進行處理。 輸入輸出字元流的開始和結束只由程式控制而不受物理符號(如回車符)的控制。 因此也把這種檔案稱作「流式檔案」。

二、文字檔案與二進位制檔案的訪問

文字工具開啟乙個檔案的過程是怎樣的呢?拿記事本來說,它首先讀取檔案物理上所對應的二進位制位元流,然後按照你所選擇的解碼方式來解釋這個流,然後將解釋結果顯示出來。一般來說,你選取的解碼方式會是ascii碼形式(ascii碼的乙個字元是8個位元),接下來,它8個位元8個比特地來解釋這個檔案流。例如對於這麼乙個檔案流"01000000_01000001_01000010_01000011"(下劃線''_'',為了增強可讀性手動新增的),第乙個8位元''01000000''按ascii碼來解碼的話,所對應的字元是字元''a'',同理其它3個8位元可分別解碼為''bcd'',即這個檔案流可解釋成「abcd」,然後記事本就將這個「abcd」顯示在螢幕上。

事實上,世界上任何東西要與其他東西通訊會話,都存在乙個既定的協議,既定的編碼。人與人之間通過文字聯絡,漢字「媽」代表生你的那個人,這就是一種既定的編碼。但注意到這樣一種情況,漢字「媽」在日本文字裡有可能是你生下的那個人,所以當乙個中國人a與日本b之間用「媽」這個字進行交流,出現誤解就很正常的。用記事本開啟二進位制檔案與上面的情況類似。記事本無論開啟什麼檔案都按既定的字元編碼工作(如ascii碼),所以當他開啟二進位制檔案時,出現亂碼也是很必然的一件事情了,解碼和解碼不對應嘛。例如檔案流''00000000_00000000_00000000_00000001''可能在二進位制檔案中對應的是乙個四位元組的整數int 1,在記事本裡解釋就變成了"null_null_null_soh"這四個控制符。

文字檔案的儲存與其讀取基本上是個逆過程。而二進位制檔案的訪問顯然與文字檔案的訪問差不多,只是編/解碼方式不同而已,也不再敘述。

三、文字檔案與二進位制檔案的優缺點

因為文字檔案與二進位制檔案的區別僅僅是編碼上不同,所以他們的優缺點就是編碼的優缺點,這個找本編碼的書來看看就比較清楚了。一般認為,文字檔案編碼基於字元定長,解碼容易些;二進位制檔案編碼是變長的,所以它靈活,儲存利用率要高些,解碼難一些(不同的二進位制檔案格式,有不同的解碼方式)。關於空間利用率,想想看,二進位制檔案甚至可以用乙個位元來代表乙個意思(位操作),而文字檔案任何乙個意思至少是乙個字元.

在windows下,文字檔案不一定是一ascii來存貯的,因為ascii碼只能表示128的標識,你開啟乙個txt文件,然後另存為,有個選項是編碼,可以選擇存貯格式,一般來說utf-8編碼格式相容性要好一些.而二進位製用的計算機原始語言,不存貯相容性.    很多書上還認為,文字檔案的可讀性要好些,儲存要花費轉換時間(讀寫要編譯碼),而二進位制檔案可讀性差,儲存不存在轉換時間(讀寫不要編譯碼,直接寫值).這裡的可讀性是從軟體使用者角度來說的,因為我們用通用的記事本工具就幾乎可以瀏覽所有文字檔案,所以說文字檔案可讀性好;而讀寫乙個具體的二進位制檔案需要乙個具體的檔案解碼器,所以說二進位制檔案可讀性差,比如讀bmp檔案,必須用讀圖軟體.

而這裡的儲存轉換時間應該是從程式設計的角度來說的,因為有些作業系統如windows需要對回車換行符進行轉換(將''\n'',換成''\r\n'',所以檔案讀寫時,作業系統需要乙個乙個字元的檢查當前字元是不是''\n''或''\r\n'').這個在儲存轉換在linux作業系統中並不需要,當然,當在兩個不同的作業系統上共享檔案時,這種儲存轉換又可能出來

二進位制檔案和文字檔案

通常,我們喜歡把檔案分為二進位制檔案 binary file 和文字檔案 text file 兩類。但事實上,所有檔案在計算機上都是以二進位制方式進行儲存的,因此二者並無本質上的區別,它們的區別僅在於對檔案內容的解釋方式上。a 文字檔案,就是根據字元編碼規則解碼後,能夠全部解碼為文字字元的 二進位制...

VC 二進位制檔案和文字檔案

檔案在計算機記憶體中以二進位制表示的資料在外部儲存介質上的另一種存放形式。檔案通常分為二進位制檔案和文字檔案。二進位制檔案是包含在 ascii 及擴充套件 ascii 字元中編寫的資料或程式指令的檔案。一般是可執行程式 圖形 圖象 聲音等等檔案。文字檔案 也稱為ascii檔案 它的每乙個位元組存放的...

二進位制檔案和文字檔案讀取的區別小議

在學習了檔案的輸入和輸出之後,本人一直存在乙個疑問,我想可能也是好多人的疑問。那就是二進位制檔案和文字檔案中的內容到底是怎麼讀寫的?我們為什麼開啟二進位制檔案看到的是一些亂碼?由於今天的時間充足,編找了一點相關資料,並總結了一下。檔案在計算機中儲存的資訊是由1或0表示的,所以按照嚴格意義來說,兩者不...