這幾個概念很常見但是也容易搞混。前兩者是相反的意思,後兩者是一對。
1. 文字模式
(textmode)
和二進位制模式
(binarymode)的
區別0. 無論你用哪種語言進行程式設計,也無論你用哪個函式進行檔案操作(庫函式也好,直接作業系統api也好),最終的檔案開啟的操作都是由作業系統來進行的,因此各種語言的情況從本質上來說都是相同的。
用二進位制模式開啟乙個檔案的時候,檔案本身的內容和你編寫程式時用函式讀到的內容完全相同(或者說和磁碟上的內容完全相同)。
但是如果用了文字模式,那麼作業系統在將檔案內容傳給上層程式(庫函式,或者是你的程式)時,或者上層程式通過作業系統向檔案寫入內容時,作業系統都會預先進行一層預處理(或者說轉義),具體過程依賴於作業系統的實現。
1. 在unix(包括linux)系統上,乙個程式從檔案裡讀資料,它得到的資料就是資料本身,乙個乙個的位元組。然而在windows系統上,乙個檔案可以用兩種模式開啟,二進位制模式或者文字模式,在二進位制模式下,表現的就像unix系統;然而在文字模式下,會有乙個轉換。是\n <-------> \r\n之間的轉換。具體講就是將回車符"\r\n"解釋成"\n"(讀出時),將"\n"解釋成"\r\n"(寫入時)。總之,在unix系統上,開啟檔案只有二進位制模式,在windows系統上,開啟檔案有文字模式和二進位制模式兩種。
2.文字檔案與二進位制檔案的區別:
將檔案看作是由乙個乙個位元組
(byte)
組成的,
那麼文字檔案中的每個位元組的最高位都是
0,也就是說文字檔案使用了乙個位元組中的七位來表示所有的資訊,而二進位制檔案則是將位元組中的所有位都用上了。這就是兩者的區別;接著,第二個問題就是檔案按照文字方式或者二進位制方式開啟,兩者會有什麼不同呢?其實不管是二進位制檔案也好,還是文字檔案也好,都是一連串的0和
1,但是開啟方式不同,對於這些0和
1的處理也就不同。如果按照文字方式開啟,在開啟的時候會進行
translate
,將每個位元組轉換成
ascii
碼,而以按照二進位制方式開啟的話,則不會進行任何的
translate
;最後就是文字檔案和二進位制檔案在編輯的時候,使用的方式也是不同的。譬如,你在記事本中進行文字編輯的時候,你進行編輯的最小單位是位元組
(byte)
;而對二進位制檔案進行編輯的話,最小單位則是位
(bit)
,當然我們都不會直接通過手工的方式對二進位制檔案進行編輯了。
從檔案編碼的方式來看,檔案可分為
ascii
碼檔案和二進位製碼檔案兩種:
ascii
檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應乙個位元組,用於存放對應的
ascii
碼。例如,數
5678
的儲存形式為:
ascii
碼: 00110101 00110110 00110111 00111000
↓
↓ ↓
↓十進位製碼:56
78 共占用4
個位元組。
ascii
碼檔案可在螢幕上按字元顯示,例如源程式檔案就是
ascii
檔案,用
dos命令
type
可顯示檔案的內容。由於是按字元顯示,因此能讀懂檔案內容。
二進位制檔案是按二進位制的編碼方式來存放檔案的。例如,數
5678
的儲存形式為:
00010110 00101110
只佔二個位元組。二進位制檔案雖然也可在螢幕上顯示,但其內容無法讀懂。
c系統在處理這些檔案時,並不區分型別,都看成是字元流,按位元組進行處理。輸入輸出字元流的開始和結束只由程式控制而不受物理符號
(如回車符
)的控制。因此也把這種檔案稱作
「流式檔案」。
讀寫文字檔案和二進位制檔案 二進位制模式
fstream binary開啟 新行採用 lf 作為乙個位元組 關閉 新行採用 cr lf 組合,作為乙個位元組。關於 cr lf 參見 以下是 c primer 第四版中的一段 1 intmain 29 10 ifstream pos type ptendmark finout.tellg 11...
文字檔案與二進位制檔案
從本質上說所有檔案都是二進位制檔案,文字i o是在二進位制i o基礎上提供的一層抽象,它封裝了字元的編碼和解碼過程。在文字i o中自動進行編碼與解碼。在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有規定格式的,由可理解的的ascii以及其它編碼文字組成的檔...
文字檔案與二進位制檔案
維基百科 二進位制檔案一般指包含ascii及擴充套件ascii字元中編寫的資料或程式指令的檔案。廣義的二進位制檔案即為檔案,由檔案在外部儲存裝置的存放方式為二進位制而得名。狹義的二進位制檔案即指除文字檔案以外的檔案。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編...