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

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

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

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

計(jì)算機(jī)中文件的類別

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

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

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

存儲方式的不同

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

舉個(gè)例子

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

hello world
hi man

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

注意事項(xiàng)

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

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

欄目分類
最近更新