<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      毛毛的小窩 — 關注技術交流、讓我們一起成長

      導航

      文本文件與二進制文件

      文本文件與二進制文件
      一、文本文件與二進制文件的定義
          大家都知道計算機的存儲在物理上是二進制的,所以文本文件與二進制文件的區別并不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。
          簡單來說,文本文件是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。二進制文件是基于值編碼的文件,你可以根據具體應用,指定某個值是什么意思(這樣一個過程,可以看作是自定義編碼)。
          從上面可以看出文本文件基本上是定長編碼的(也有非定長的編碼如UTF-8),基于字符嘛,每個字符在具體編碼中是固定的,ASCII碼是8個比特的編碼,UNICODE一般占16個比特。而二進制文件可看成是變長編碼的,因為是值編碼嘛,多少個比特代表一個值,完全由你決定。大家可能對BMP文件比較熟悉,就拿它舉例子吧,其頭部是較為固定長度的文件頭信息,前2字節用來記錄文件為BMP格式,接下來的8個字節用來記錄文件長度,再接下來的4字節用來記錄bmp文件頭的長度。。。大家可以看出來了吧,其編碼是基于值的(不定長的,2、4、8字節長的值都有),所以BMP是二進制文件。

      二、文本文件與二進制文件的存取
          文本工具打開一個文件的過程是怎樣的呢?拿記事本來說,它首先讀取文件物理上所對應的二進制比特流(前面已經說了,存儲都是二進制的),然后按照你所選擇的解碼方式來解釋這個流,然后將解釋結果顯示出來。一般來說,你選取的解碼方式會是ASCII碼形式(ASCII碼的一個字符是8個比特),接下來,它8個比特8個比特地來解釋這個文件流。例如對于這么一個文件流"01000000_01000001_01000010_01000011"(下劃線''_'',是我為了增強可讀性,而手動添加的),第一個8比特''01000000''按ASCII碼來解碼的話,所對應的字符是字符''A'',同理其它3個8比特可分別解碼為''BCD'',即這個文件流可解釋成“ABCD”,然后記事本就將這個“ABCD”顯示在屏幕上。
          事實上,世界上任何東西要與其他東西通信會話,都存在一個既定的協議,既定的編碼。人與人之間通過文字聯絡,漢字“媽”代表生你的那個人,這就是一種既定的編碼。但注意到這樣一種情況,漢字“媽”在日本文字里有可能是你生下的那個人,所以當一個中國人A與日本B之間用“媽”這個字進行交流,出現誤解就很正常的。用記事本打開二進制文件與上面的情況類似。記事本無論打開什么文件都按既定的字符編碼工作(如ASCII碼),所以當他打開二進制文件時,出現亂碼也是很必然的一件事情了,解碼和譯碼不對應嘛。例如文件流''00000000_00000000_00000000_00000001''可能在二
      進制文件中對應的是一個四字節的整數int 1,在記事本里解釋就變成了"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)時,文本讀與二進制讀的結果一樣.


      五、實例
      5678的存儲形式為:ASCII碼:    00110101   00110110   00110111   00111000  (四個字節)
      5678的存儲形式為:二進制:      00010110   00101110  (兩個字節)
      二進制文件和文本文件的唯一差異就是前者含有一些非標準輸出的ASCII碼。0x01就是非標準輸出的ASCII碼,0x61就是標準輸出的ASCII碼。)

      posted on 2008-02-27 12:51  mjgforever  閱讀(7124)  評論(2)    收藏  舉報

      主站蜘蛛池模板: 国产对白老熟女正在播放| 天天狠天天透天天伊人| 国产中文99视频在线观看| 老师破女学生处特级毛ooo片| 狠狠色综合久久狠狠色综合| 看免费的无码区特aa毛片| 亚洲成av人片乱码色午夜| 日本一区不卡高清更新二区| 成人3D动漫一区二区三区| 香蕉久久久久久久av网站| 十四以下岁毛片带血a级| 国产精品一区二区三区四区| 欧美性受xxxx白人性爽| 91福利国产午夜亚洲精品| 无码日韩av一区二区三区| 国产精品自产在线观看一| 国产永久免费高清在线| 久9视频这里只有精品试看| 亚洲综合一区二区精品导航| 日本三级香港三级人妇99| 亚洲国产精品久久久久秋霞| 蕲春县| 亚洲精品一区三区三区在| 国产区成人精品视频| 亚洲日韩久久综合中文字幕| AI做受???高潮AAAA视频| 深夜福利啪啪片| 日韩V欧美V中文在线| 人妻精品人妻无码一区二区三区| 欧美伦费免费全部午夜最新| 齐齐哈尔市| 色老99久久精品偷偷鲁| 韩国三级+mp4| free性开放小少妇| 中文字幕在线无码一区二区三区| 亚洲一区中文字幕第十页| 亚洲国产午夜精品福利| 亚洲色大成网站WWW尤物| 鲁一鲁一鲁一鲁一澡| 中文在线最新版天堂| 国产精品一区二区三区日韩|