首頁 > 常見問題 > 主體

文字檔案和二進位檔案差異是什麼

coldplay.xixi
發布: 2020-11-20 09:42:29
原創
24182 人瀏覽過

文字檔案和二進位檔案區別:1、文字檔案是基於字元編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等;2、二進位檔案是基於值編碼的檔案

文字檔案和二進位檔案差異是什麼

# 文字檔案與二進位檔案差異:

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

大家都知道電腦的儲存在物理上是二進位的,所以文字檔案與二進位檔案的區別並不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。

簡單來說,文字檔案是基於字元編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。二進位檔案是基於值編碼的文件,你可以根據具體應用,指定某個值是什麼意思(這樣一個過程,可以看作是自訂編碼)。

從上面可以看出文字檔基本上是定長編碼的,基於字元嘛,每個字元在具體編碼中是固定的,ASCII碼是8個位元的編碼,UNICODE一般佔16個比特。而二進位檔案可看成是變長編碼的,因為是值編碼嘛,多少個位元代表一個值,完全由你決定。大家可能對BMP文件比較熟悉,就拿它舉例子吧,其頭部是較為固定長度的文件頭信息,前2字節用來記錄文件為BMP格式,接下來的8個字節用來記錄文件長度,再接下來的4位元組用來記錄bmp檔案頭的長度。 。 。大家可以看出來了吧,其編碼是基於值的(不定長的,2、4、8位元組長的值都有),所以BMP是二進位。

 

二、文字檔案與二進位檔案的存取

文字工具開啟一個檔案的過程是怎樣的呢?拿記事本來說,它首先讀取檔案物理上所對應的二進位位元流(前面已經說了,儲存都是二進位的),然後按照你所選擇的解碼方式來解釋這個流,然後將解釋結果顯示出來。一般來說,你選取的解碼方式會是ASCII碼形式(ASCII碼的一個字元是8個位元),接下來,它8個位元8個位元來解釋這個檔案流。例如對於這麼一個文件流"01000000_01000001_01000010_01000011"(下劃線'_',是我為了增強可讀性,而手動添加的),第一個8比特'010000000'按ASCII碼來解碼的話,所用的'A',同理其它3個8位元可分別解碼為'BCD',即這個檔案流可解釋成“ABCD”,然後記事本就將這個“ABCD”顯示在螢幕上。

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

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

 

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

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

很多書上還認為,文字檔案的可讀性要好些,儲存要花費轉換時間(讀寫要編譯碼),而二進位檔案可讀性差,儲存不存在轉換時間(讀寫不要編解碼,直接寫值).這裡的可讀性是從軟體使用者角度來說的,因為我們用通用的記事本工具就幾乎可以瀏覽所有文本文件,所以說文本文件可讀性好;而讀寫一個具體的二進製文件需要一個具體的文件解碼器,所以說二進位文件可讀性差,例如讀BMP文件,必須用讀圖軟體.而這裡的儲存轉換時間應該是從程式設計的角度來說的,因為有些作業系統如windows需要對回車換行符進行轉換(將'\n',換成'\r\n',所以檔案讀寫時,作業系統需要一個一個字元的檢查當前字元是不是'\n'或'\r\n')。這個在儲存轉換在Linux作業系統中並不需要,當然,當在兩個不同的作業系統上共用檔案時,這種儲存轉換又可能出來(如Linux系統和Windows系統共用文字檔案)。關於這個轉換怎麼進行,我將在下一篇文章《Linux文字檔案與Windows文字檔案間的轉換》給出^_^

四、C的文字讀寫和二進制讀寫

應該說C的文字讀寫與二進位的讀寫是一個程式設計層次上的問題,與具體的作業系統有關,所以"用文字方式讀寫的文件一定是文字文件,用二進位讀寫的檔案一定是二進位檔案"這類觀點是錯誤的.以下的講述非明確指出作業系統類型,都暗指windows. C的文本方讀寫與二進位讀寫的差異僅體現在回車換行符的處理上.文字方式寫時,每遇到一個'\n'(0AH換行符),它將其換成'\r\n'(0D0AH,回車換行),然後再寫入檔案;當文字讀取時,它每遇到一個'\r\n'將其反變化為'\n',然後送到讀取緩衝區.正因為文字方式有'\n'--'\r\n'之間的轉換,其存在轉換耗時.二進位讀寫時,其不存在任何轉換,直接將寫入緩衝區中資料寫入檔案.

 總地來說,從程式設計的角度來說,C中文字或二進位讀寫都是緩衝區與檔案中二進位流的交互,只是文字讀寫時有回車換行的轉換.所以當寫入緩衝區中無換行符號'\n'(0AH),文字寫與二進位寫的結果是一樣的,同理,當檔案中不存在'\r\n'(0DH0AH)時,文字讀與二進位讀的結果一樣.

以上是文字檔案和二進位檔案差異是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板