C++輸出二進制文件和文本文件


所謂二進制文件和文本文件對於字母而言沒有什么不同,都是存儲該字母的ASCII碼值。能引起不同的是數字和一些排版用符號的格式。

  • 數字在二進制文件中會存儲該數字的值,而文本文件中則首先將該數字視為字符量,並按照ASCII碼表轉換為新的數字再存儲;
  • 排版符號的一個例子是換行符,二進制文件只是一個換行符,文本文件中則是換行符加上回車符;
    所以簡單的區分方法是文本文件對每個字符都要做ASCII轉換,而二進制文件只會對字母做必要的ASCII轉換,對數字則是直接存儲的。

下來我們來討論如何真正的實現二進制文件的建立:
並不是我們所認為的在打開文件時設定ios::binary就可以,還要注意輸出的函數:

  1. 在使用<<輸出時,實際上都會轉換為文本文件輸出。即如果輸出一個數字,先是轉換為相應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];
             }
  1. 另外一種方法是write函數,理論是一樣的,都是依靠強制轉換為char型變量以避免ASCII轉換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM