1.定義 計算機文件基本上分為兩類:文本文件和二進制文件。 計算機的存儲在物理上都是二進制的,文本文件與二進制文件的區別是邏輯上的。簡單的說,文本文件是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等。 二進制文件是基于值編碼的文件,可以根據具體應用,指定某個值所代表的含義。 文本文件基本上是定長編碼(也有非定長編碼如UTF-8)。而二進制文件可看成變長編碼,多少個比特代表一個值,完全由你決定。
2.存取 文本工具打開一個文件的過程是怎樣的呢?拿記事本來說,它首先讀取文件物理上所對應的二進制比特流,然后按照你所選擇的解碼方式來解釋這個流,然后將解釋結果顯示出來。一般來說,你選取的解碼方式會是ASCII碼形式(ASCII碼的一個字符是8個比特),接下來,它8個比特8個比特地來解釋這個文件流。例如對于這么一個文件流”01000000_01000001_01000010_01000011”(下劃線”_”,為了增強可讀性手動添加的),第一個8比特”01000000”按ASCII碼來解碼的話,所對應的字符是字符”A”,同理其它3個8比特可分別解碼為”BCD”,即這個文件流可解釋成“ABCD”,然后記事本就將這個“ABCD”顯示在屏幕上。 世界上任何東西要與其他東西通信會話,都存在一個既定的協議,既定的編碼。記事本無論打開什么文件都按既定的字符編碼工作(如ASCII碼),所以當他打開二進制文件時,出現亂碼也是很必然的一件事情了,解碼和譯碼不對應嘛。例如文件流”00000000_00000000_00000000_00000001”可能在二進制文件中對應的是一個四字節的整數int 1,在記事本里解釋就變成了”NULL_NULL_NULL_SOH”這四個控制符。
3.優缺點 因為文本文件與二進制文件的區別僅僅是編碼上不同,所以他們的優缺點就是編碼的優缺點,這個找本編碼的書來看看就比較清楚了。一般認為,文本文件編碼基于字符定長,譯碼容易些;二進制文件編碼是變長的,所以它靈活,存儲利用率要高些,譯碼難一些(不同的二進制文件格式,有不同的譯碼方式)。關于空間利用率,想想看,二進制文件甚至可以用一個比特來代表一個意思(位操作),而文本文件任何一個意思至少是一個字符. 在windows下,文本文件不一定是一ASCII來存貯的,因為ASCII碼只能表示128的標識,你打開一個txt文檔,然后另存為,有個選項是編碼,可以選擇存貯格式,一般來說UTF-8編碼格式兼容性要好一些.而二進制用的計算機原始語言,不存貯兼容性. 很多書上還認為,文本文件的可讀性要好些,存儲要花費轉換時間(讀寫要編譯碼),而二進制文件可讀性差,存儲不存在轉換時間(讀寫不要編解碼,直接寫值).這里的可讀性是從軟件使用者角度來說的,因為我們用通用的記事本工具就幾乎可以瀏覽所有文本文件,所以說文本文件可讀性好;而讀寫一個具體的二進制文件需要一個具體的文件解碼器,所以說二進制文件可讀性差,比如讀BMP文件,必須用讀圖軟件. 而這里的存儲轉換時間應該是從編程的角度來說的,因為有些操作系統如windows需要對回車換行符進行轉換(將”/n”,換成”/r/n”,所以文件讀寫時,操作系統需要一個一個字符的檢查當前字符是不是”/n”或”/r/n”).這個在存儲轉換在linux操作系統中并不需要,當然,當在兩個不同的操作系統上共享文件時,這種存儲轉換又可能出來(如Linux系統和Windows系統共享文本文件)。關于這個轉換的方法,請參考文章《Linux文本文件與Windows文本文件間的轉換》http://blog.csdn.net/zhangyang0402/article/details/5153649
4.C的文本讀寫和二進制讀寫 應該說C的文本讀寫與二進制的讀寫是一個編程層次上的問題,與具體的操作系統有關,所以"用文本方式讀寫的文件一定是文本文件,用二進制讀寫的文件一定是二進制文件”這類觀點是錯誤的.下面的講述非明確指出操作系統類型,都暗指windows. C的文本方讀寫與二進制讀寫的差別僅僅體現在回車換行符的處理上.文本方式寫時,每遇到一個”/n”(0AH換行符),它將其換成”/r /n”(0D0AH,回車換行),然后再寫入文件;當文本讀取時,它每遇到一個”/r/n”將其反變化為”/n”,然后送到讀緩沖區.二進制讀寫時,其不存在任何轉換,直接將寫緩沖區中數據寫入文件. 總地來說,從編程的角度來說,C中文本或二進制讀寫都是緩沖區與文件中二進制流的交互,只是文本讀寫時有回車換行的轉換.所以當寫緩沖區中無換行符”/n”(0AH),文本寫與二進制寫的結果是一樣的,同理,當文件中不存在”/r/n”(0DH0AH)時,文本讀與二進制讀的結果一樣.
參考網址: http://www.cnblogs.com/zhangjiankun/archive/2011/11/27/2265184.html
PE文件格式 可移植性可執行文件(英語:Portable Executable,縮寫為PE)是一種用于可執行文件、目標文件和動態鏈接庫的文件格式,主要使用在32位和64位的Windows操作系統上。“可移植的”是指該文件格式的通用性,可用于許多種不同的操作系統和體系結構中。PE文件格式封裝了Windows操作系統加載可執行程序代碼時所必需的一些信息。這些信息包括動態鏈接庫、API導入和導出表、資源管理數據和線程局部存儲數據。在Windows NT操作系統中,PE文件格式主要用于EXE文件、DLL文件、.sys(驅動程序)和其他文件類型。可擴展固件接口(EFI)技術規范書中說明PE格式是EFI環境中的標準可執行文件格式。開頭為DOS頭部。 PE格式是由Unix中的COFF格式修改而來的。在Windows開發環境中,PE格式也稱為PE/COFF格式。 在Windows NT操作系統中,PE格式目前支持IA-32、IA-64和x86-64(AMD64/Intel64)的指令系統。在Windows 2000之前,Windows NT還支持MipS、Alpha和PowerPC的指令系統。由于Windows CE也在使用PE文件格式,因此PE仍然支持幾種不同型號的MIPS、ARM(包括Thumb)和SuperH指令系統。 PE文件格式的主要競爭對手是可執行與可鏈接格式(ELF)(使用于Linux和大多數Unix版本中)和Mach-O(使用于Mac OS X中)。
新聞熱點
疑難解答