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

文字檔案與二進位制的區別

簡單來說,
文字檔案是基於字元編碼的檔案,常見的編碼有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 33 0A          和     41 62 31 32 33 0D