日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

文本文件與二進制文件的區(qū)別

作者:sygydxfwd 更新時間: 2022-09-25 編程語言

計算機中文件的類別

從最本質上說,所有計算機中存儲的信息都是二進制格式,無論是一個jpg圖片,一個exe程序,一個mp4視頻或者一個txt文檔等等,對計算機而言,他們在硬盤上存的就是一堆兒一堆兒的01010011…的序列,以上所提到的不同類型的文件在硬盤上都是按0和1存儲,不同點僅在于用了多少個0和1而已。

為何要區(qū)分文本文件和二進制文件

私以為,文本文件最初出現(xiàn)時是為了人類方便閱讀而設計的,也就是人為設計一種格式來解釋0和1的組合如何被計算機所“解釋”,這種解釋規(guī)范就是字符集編碼,例如ASCII碼,UTF-8碼,當計算機按照這個編碼規(guī)則去讀取文件的時候,讀出來的就是一個一個的字符。
例如,用ASCII碼規(guī)則去解釋如下組合
二進制 01000001 01000010 01000011 01000100
十六進制 0x41 0x42 0x43 0x44
字符 A B C D
解釋出來就是“ABCD”四個字母,在文本編輯器或者控制臺上都顯示為ABCD。
如果不按照ASCII碼去解讀,它就是一個二進制文件,讀出來的就是
0x41 0x42 0x43 0x44,至于這四個數到底表示什么含義,要根據文件的類型來解釋,如果是jpg文件,它可能表示一個格式信息或者一個像素點的RGB值,如果是一個exe文件,它可能表示一個中間變量的運算結果,這就取決于用何種程序來讀取并解釋這段信息了,這就是為什么我們用視頻播放器去打開exe文件會發(fā)現(xiàn)是亂碼或者直接報錯,因為沒有用對解釋規(guī)則,這段數據頭部都不是mp4規(guī)定的頭部格式,若用視頻播放器去讀取一定會出錯。同樣的道理,用視頻播放器剪輯一個視頻并保存后,那么這段mp4視頻的文件格式一定是包含標準mp4文件的一些格式信息的,若你用另一個vlc播放器去讀取也會得到一堆亂碼,因為文件格式不符合vlc。
二進制文件又稱為流式文件,就是一個數據流,不同的程序采用不同的解釋規(guī)則來處理這個數據流,數據流可以是任意長度的,文本文件每一個字節(jié)代表一個字符,屬于流式文件的特例。

存儲方式的不同

這里可能會有讀者有疑惑,不是前文已經說了嗎,所有的信息都是以二進制方式存儲的,不區(qū)分文件類別的啊。是的,確實是這樣,你沒有錯,問題的根本在于這些二進制數我們如何去解釋,請體會這句話,閱讀數遍以上,首先我們制定一個解釋規(guī)則(例如ASCII碼表),用這個解釋規(guī)則來生成數據并存儲起來,當我們再以這個規(guī)則去讀取數據的時候,我們就能看到“原始”的數據含義。人類最偉大的發(fā)明莫過于文字,所以對于文字的處理在計算機的發(fā)展中是非常重要的研究方向,以至于我們專門為存儲和表示文字而去規(guī)定了一套規(guī)則(ASCII碼表),甚至后期為了能讓世界上各個語言的人種共享計算機的便利,發(fā)明了一套集大成的規(guī)則(UTF-8碼表),如果我們在存儲數據的時候就下意思地按照這套規(guī)則來存儲,那么儲存好的文件我們就叫它文本文件(也有一種說法叫文字文件,更為形象),文本文件是如此重要,以至于我們把它單獨拿了出來,重點關注,而把其他的圖片或者視頻程序之類的統(tǒng)稱為二進制文件,因為他們也有對應的編碼規(guī)范,但是實在太多了,不像文字統(tǒng)一性這么好,如果都去重點關注,那會累死人的,所以干脆都叫二進制文件。
所以總結以下,二進制文件的范圍是涵蓋文本文件的,只是因為文本對于我們人類來說實在太重要了,為了突出這種重要性,在存儲數據的時候刻意讓數據符合我們制定的文字規(guī)范存儲,當我們用這種規(guī)范再去讀取的數據的時候就知道它原本的含義。

舉個例子

以最簡單的txt文件為例,你在Windows系統(tǒng)下,當你在一個txt文件中寫入這樣一行字符“hello world”,第二行寫“hi man”,你把他保存起來,放到桌面上,起名字叫“new.txt”,那么它在計算機中是這樣存放的
hello world\r\n
hi man
其中\(zhòng)r\n表示一行的結束,是作為一個行結束符號,如果我們把這個字符串顯示到終端中,顯示程序讀取到這個結束符的時候就自動換行,重新開始一行進行顯示,因為控制符號是不顯示的,所以最終呈現(xiàn)出來的效果就是

hello world
hi man

但是如果以二進制的形式去讀取的話,例如我們用一些數據恢復軟件,或者winhex,hexdump軟件的話,他們是不區(qū)分文本模式的,全部按照二進制形式處理,讀出來的就會是
0x68 0x65 0x6c 0x6c 0x6f 0x20 0x77 0x6f 0x72 0x6c 0x64 0x0d 0x0a
0x68 0x69 0x20 0x6d 0x61 0x6e
注意,黃色是不顯示的,他們是格式控制字符。

注意事項

需要注意的是,任何文本文件,其存儲的值都會在0-127的范圍內,這個范圍涵蓋了格式控制符(一般不會在終端上顯示出來,但在文件中存在,作為指導程序的“指示”存在,指導程序如何控制顯示格式)和字母,數字,特殊字符。因為ASCII碼表規(guī)定好了,就是用這個范圍的數字來表示字母,數字,符號和格式控制符,如果程序以文本的格式去讀的話,例如你聲明了一個char變量,但是卻讀到了0x80(128dec),那一定會報錯的,但是如果你聲明的不是char變量,而是int變量,那程序就會認為這就是一個數值,沒有錯。

原文鏈接:https://blog.csdn.net/sygydxfwd/article/details/127013286

欄目分類
最近更新