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