標籤:文本 txt 簡單的 方法 檔案的 大小 開啟 source bin
所謂二進位檔案和文字檔對於字母而言沒有什麼不同,都是儲存該字母的ASCII碼值。能引起不同的是數字和一些排版用符號的格式。
- 數字在二進位檔案中會儲存該數位值,而文字檔中則首先將該數字視為字元量,並按照ASCII碼錶轉換為新的數字再儲存;
- 排版符號的一個例子是分行符號,二進位檔案只是一個分行符號,文字檔中則是分行符號加上斷行符號符;
所以簡單的區分方法是文字檔對每個字元都要做ASCII轉換,而二進位檔案只會對字母做必要的ASCII轉換,對數字則是直接儲存的。
下來我們來討論如何真正的實現二進位檔案的建立:
並不是我們所認為的在開啟檔案時設定ios::binary就可以,還要注意輸出的函數:
在使用<<輸出時,實際上都會轉換為文字檔輸出。即如果輸出一個數字,先是轉換為相應ASCII碼值作為字串儲存。用這種方法輸出二進位檔案的方法就是欺騙電腦——把double,int等數組強制轉換為char型數組。注意不能是單個變數,因為double一個是4位元組,char是1個位元組,數群組轉換的同時數組大小也變化使得資料不丟失,但變數在強制轉換的過程中一定會損失資料。當直接轉換為char,實際上未經過轉化,而且輸出char型變數時,也不會進行轉化;這樣就欺騙了<<操作符,讓我們可以以char的形式輸出一個數,而不用ASCII轉換。實際代碼如下:
ofstream file("E:/BaiduYunDownload/data.txt" ,ios_base::binary|ios_base::trunc); double a[4]={16.7,2.4,42.3,56.7}; int i; if(!file.good()) { printf("Cannot open the file\n" ); return 0; } for(i=0;i<sizeof (a);i++){ file<<((char *)a)[i]; }
另外一種方法是write函數,理論是一樣的,都是依靠強制轉換為char型變數以避免ASCII轉換
C++輸出二進位檔案和文字檔