C++輸出二進位檔案和文字檔

來源:互聯網
上載者:User

標籤:文本   txt   簡單的   方法   檔案的   大小   開啟   source   bin   

所謂二進位檔案和文字檔對於字母而言沒有什麼不同,都是儲存該字母的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];         }
  2. 另外一種方法是write函數,理論是一樣的,都是依靠強制轉換為char型變數以避免ASCII轉換

C++輸出二進位檔案和文字檔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.