c語言中採用二進位制檔案儲存資料的問題

時間 2021-05-23 03:58:08

1樓:投機士

在磁碟的儲存上都是二進位制儲存這點上都一樣。

從檔案編碼的方式來看,檔案可分為ascii碼檔案和二進位制碼檔案兩種。

ascii檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ascii碼。例如,數5678的儲存形式為:

asc碼:  00110101 00110110 00110111 00111000

↓     ↓    ↓    ↓

十進位制碼: 5     6    7    8 共佔用4個位元組。ascii碼檔案可在螢幕上按字元顯示, 例如源程式檔案就是ascii檔案,用dos命令type可顯示檔案的內容。

由於是按字元顯示,因此能讀懂檔案內容。

二進位制檔案是按二進位制的編碼方式來存放檔案的。 例如, 數5678的儲存形式為: 00010110 00101110只佔2個位元組。

二進位制檔案雖然也可在螢幕上顯示, 但其內容無法讀懂。

流可以分為兩種型別:文字流和二進位制流。文字流是解釋性的,最長可達255個字元,其中回車/換行將被轉換為換行符「/n」,(如果以"文字"方式開啟一個檔案,那麼在讀字元的時候,系統會把所有的"/r/n"序列轉成"/n",在寫入時把"/n"轉成"/r/n" archim 's opinion )。

二進位制流是非解釋性的,一次處理一個字元,並且不轉換字元。

通常,文字流用來讀寫標準的文字檔案,或者將字元輸出到螢幕或印表機,或者接受鍵盤的輸入;而二進位制流用來讀寫二進位制檔案(例如圖形或字處理文件),或者讀取滑鼠輸入,或者讀寫調變解調器。

如果用文字方式開啟檔案,會把「0d 0a」自動變換成「/n」來存在記憶體中。寫入的時候反向處理。 而二進位制方式開啟的話,就不會有這個過程。

所以從上面可以看出:文字檔案佔磁碟空間大,讀取速度比較慢,但開啟後容易理解;二進位制檔案佔磁碟空間小,讀取速度快,如果要理解檔案檔案的意思需要自己進行解釋。

2樓:匿名使用者

比如要儲存一個整數int a=12345;到檔案可以是文字方式,可以是二進位制方式。

文字方式就是儲存的檔案內容是一個字串12345,記事本可以直接開啟,顯示12345

fprintf(fp, "%d", a);

二進位制方式就是把直接把12345這個數在記憶體的內容(0x00003039)直接放在檔案中,你用記事本開啟是亂碼,一般用16進位制編輯器開啟

fwrite(&a, sizeof(a), 1, fp);

一般都是直接把一個結構儲存到檔案

比如struct stu

students;

3樓:匿名使用者

1、二進位制文字使用fopen函式的二進位制模式「rb」就可以開啟。對於程式來說,不管字尾名如何,檔案分為兩種型別:文字檔案和二進位制檔案。

c語言裡有一系列檔案操作函式。區分文字和二進位制檔案,需要在開啟檔案時設定不同的控制符mode的變數即可。

2、fopen的函式原型:file * fopen(const char * path,const char * mode);

fopen函式的第一個引數是檔案路徑,第二個引數是開啟方式,有以下幾種方式:

r 以只讀方式開啟檔案,該檔案必須存在。

r+ 以可讀寫方式開啟檔案,該檔案必須存在。

rb+ 讀寫開啟一個二進位制檔案,允許讀資料。

rw+ 讀寫開啟一個文字檔案,允許讀和寫。

w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。

w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。

a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(eof符保留)

a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。 (原來的eof符不保留)

wb 只寫開啟或新建一個二進位制檔案;只允許寫資料。

wb+ 讀寫開啟或建立一個二進位制檔案,允許讀和寫。

wt+ 讀寫開啟或著建立一個文字檔案;允許讀寫。

at+ 讀寫開啟一個文字檔案,允許讀或在文字末追加資料。

ab+ 讀寫開啟一個二進位制檔案,允許讀或在檔案末追加資料。

上述的形態字串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函式庫開啟的檔案為二進位制檔案,而非純文字檔案。

3、例程:

#include

#include

int main ()

while ((iread = fread (szbuf, 1, sizeof (szbuf), fpphoto)) > 0)

fwrite (szbuf, 1, iread, fptarget) ;

while ((iread = fread (szbuf, 1, sizeof (szbuf), fptext)) > 0)

fwrite (szbuf, 1, iread, fptarget) ;

fclose (fpphoto) ;

fclose (fptext) ;

fclose (fptarget) ;

return 0 ;}

4樓:

檔案本質上都是用二進位制存貯的,我不明白你說的「一般儲存方式」是啥。

採用二進位制儲存,最關鍵的是你如何設計你儲存的資料結構。

c語言中怎麼表示,C語言中 怎表達?

四舍 入 標準的c語言中沒有 這個符號及常量,一般在開發過程中是通過開發人員自己定義這個常量的,最常見的方式是使用巨集定義 define pi 3.141592 也可以直接普通變數定義,如 double pi 3.141592 可以負責任的告訴你,c99標準裡沒提這事,但大部分實現裡 vs和gcc ...

C語言中if和switch區別,C語言中if else語句與switch語句的區別在哪裡?

風若遠去何人留 switch語句,可讀性更好,整體流程看起來清晰明確。if語句適應性更強,可以處理更多的情況。所有的switch語句都可以寫成if的形式,比如switch a 可以寫作 if a b case b else if a c case celse default.但是switch 語句,...

C語言中return的含義,C語言中Return 0是什麼作用

及羽揚俊 在函式返回型別為void時,即不需要返回任何值,要想結束函式就用 return 它表示函式執行到這一句時終止函式 return 表示結束當前函式並返回值,如果沒定義,則返回 null 如 return 1 表示返回1 return 表示返回 null 這裡我給你一個簡單的c程式的例子。in...