1. 程式人生 > >文字流與二進位制流的區別

文字流與二進位制流的區別

最近在複習c語言的檔案處理函式,更大的層面來說這都是IO問題,所以複習一下IO相關的知識。

而文字流與二進位制流的概念我看了這篇文章,覺得講地很好,它的說法和《C和指標》裡面的是一樣的。

先說下兩個重要的概念,我們鍵盤上的enter鍵也就是回車鍵,在按下的時候實際上可以分解為兩個動作。

(1)將游標位置移動到最開始:/r,即老式打字機意義上的回車。

(2)講游標移動到下一行:/n,即換行。

文章轉載自:http://blog.sina.com.cn/s/blog_60d705b10100efnp.html

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


簡單來說,

  • 文字檔案是基於字元編碼的檔案,常見的編碼有ASCII編碼,UNICODE編碼等等。
  • 二進位制檔案是基於值編碼的檔案,你可以根據具體應用,指定某個值是什麼意思(這樣一個過程,可以看作是自定義編碼)。
從上面可以看出文字檔案基本上是定長編碼的,基於字元嘛,每個字元在具體編碼中是固定的,ASCII碼是8個位元的編碼,UNICODE一般佔16個位元。
而二進位制檔案可看成是變長編碼的,因為是值編碼嘛,多少個位元代表一個值,完全由你決定。

C的文字讀寫和二進位制讀寫
    應該說C的文字讀寫與二進位制的讀寫是一個程式設計層次上的問題,與具體的作業系統有關,所以"用文字方式讀寫的檔案一定是文字檔案,用二進位制讀寫的檔案一定是二進位制檔案"這類觀點是錯誤的.下面的講述非明確指出作業系統型別,都暗指windows.
   C的文字方讀寫與二進位制讀寫的差別僅僅體現在回車換行符的處理上.

文字方式寫時,每遇到一個''\n''(0AH換行符),它將其換成''\r\n''(0D0AH,回車換行),然後再寫入檔案;當文字讀取時,它每遇到一個''\r\n''將其反變化為''\n'',然後送到讀緩衝區.
二進位制讀寫時,其不存在任何轉換,直接將寫緩衝區中資料寫入檔案.


對於內容為 “Ab123\r\n" (41 62 31 32 33 0D 0A)的檔案,
pf1 = fopen("f:\\1.txt","r");或者pf1 = fopen("f:\\1.txt","rb");
for(int i=0;i <6;i++){
  fread(&a[i],1,1,pf1);
   printf("%0X ",a[i]);
}
fclose(pf1);//關閉檔案

的結果分別為:
41 62 31 32 330A         和    41 62 31 32 33 0D