一個數字666,你數數時它代表一個數字,你排隊時它代表一個位置,學號系統裏它代表一個具體的個人,考試時它代表分數或排名,聊天時它可能代表一種「稱讚」,聖經裏它可能代表魔鬼,二進位裏它的表現形式是1010011010,對處理器來說它可能是一個指令也可能是一個數據,一個索引表裡它可能是對應任何東西的鍵值…………
就像一個女人她可能是同學,可能是女朋友,可能是女兒,可能是妻子,可能是媽媽……一個男人,他可能是兄弟,可能是男朋友,可能是「你是個好人」,可能是丈夫,可能是兒子,可能是父親……
所以,一個事物到底代表什麼,除了它本身的固有意義(如一個數字)以外,它的擴展意義完全取決於是誰來解釋和表示這個事物。
計算機所有的文件確實都是二進位數據,然後我們人為的規定了一些格式來說明哪些數據表示文字,哪些數據表示圖片。
拋開現有的各種複雜的格式不談,假如我們現在只有兩種格式,文字和圖片,我們怎麼來區分它們呢?
自己規定一下即可,0 開頭的用來表示文字,1 開頭的表示圖片。然後給一串二進位編碼的數據,只需要檢查開頭的二進位是幾即可。
但現在有各種各樣的數據,僅僅是文字,編碼就有 ASCII
, UTF-8
,UTF-16
等等,之前也寫過一篇字元串編碼的。另外圖片的話,又有 jpg,png,gif 等等。還有視頻,mp4,rmvb 等等。
這麼多格式,我們分別規定了這些格式開頭的數字還有結尾的數字,比如 jpg 圖片格式,如果我們去看它的二進位形式,會發現它是以十六進位 ffd8
開頭,也就是二進位的 1111111111011000
。然後以十六進位的 ffd9
結尾,也就是二進位的 1111 1111 1101 1001
。
我們隨便打開幾張圖片看一下它的二進位數據,使用 Notepad++,裝一個 HEX-Editor 插件即可。
開始部分