二進位制檔案與文字檔案

2022-07-06 19:45:12 字數 1340 閱讀 6738

我們首先來看乙個檔案寫入時經常遇到的乙個問題。有乙個cpp檔案,程式**如下:

1#include 

<

stdio.h

>23

void

main()

4編譯執行該程式,可以看到程式目錄下多了個檔案:1.txt,但是發現這個檔案的大小的4個位元組(4 bytes),而我們剛剛寫入的只有3個位元組。我們可以以二進位制方式開啟這個檔案,結果如下:

61 0d 0a 62

其中61是字元'a'的ascii碼,62是'b'的ascii碼,0a是十進位制數:10。可以發現多了乙個0d字元,該字元實際上就是回車字元,也就是十進位制數:13。我們並沒有寫入這個字元,而是系統寫檔案時自動加入的,所以檔案'1.txt'大小為4個位元組。

接下來我們看看讀取1.txt的情況。實現讀取1.txt檔案的**如下:

1file 

*pfile

=fopen(

"1.txt",

"r");

2char

*pbuf;

3fread(pbuf,1,

3,pfile);

4pbuf[3]

=0;5

fclose(pfile);

6printf(

"%s\n

", pbuf);

執行程式發現讀取操作是正確的,雖然檔案大小是4個位元組,而我們只讀取3個就把全部內容讀出來了。

而這裡預設是以文字方式開啟檔案,我們現在用另一種方式:以二進位制方式開啟1.txt。將上述**中的第一行改成這樣:

file 

*pfile2 

=fopen(

"1.txt", 

"rb");

執行後發現只有只有字母'a'和回車輸出。除錯時發現,讀取的內容為'a',後面是兩豎槓,實際上是0d和0a。這是因為我們以二進位制方式讀取,實際只讀取了三個位元組。

這是,我們就會想到如果寫入檔案時也以二進位制方式寫入,那麼檔案大小是多少呢?**如下:

1#include 

<

stdio.h

>23

void

main()

4再次執行程式,這時看到生成的1.txt檔案大小是3個位元組。

要注意的是,雖然我們把檔案分為二進位制檔案和文字檔案,但實際上它們都是以二進位制資料的方式儲存的:文字只是計算機記憶體中以二進位制表示的資料在外部儲存介質上的另一種存放形式。對於文字檔案來說,它只是一種特殊形式的檔案,它所存放的每乙個位元組都可以轉換為乙個可讀的字元。就是對於文字本身來說,在其存放資料時,實際上是按照資料在記憶體中存放的方式來存放的。在記憶體中不會存放'a'和'b'這樣的字元,存放的都是它們的ascii碼:61和62。

文字檔案與二進位制檔案

從本質上說所有檔案都是二進位制檔案,文字i o是在二進位制i o基礎上提供的一層抽象,它封裝了字元的編碼和解碼過程。在文字i o中自動進行編碼與解碼。在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有規定格式的,由可理解的的ascii以及其它編碼文字組成的檔...

文字檔案與二進位制檔案

維基百科 二進位制檔案一般指包含ascii及擴充套件ascii字元中編寫的資料或程式指令的檔案。廣義的二進位制檔案即為檔案,由檔案在外部儲存裝置的存放方式為二進位制而得名。狹義的二進位制檔案即指除文字檔案以外的檔案。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編...

文字檔案與二進位制檔案

什麼是文字檔案,什麼是二進位制檔案?在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有格式的,由可理解的ascii以及其他編碼文字組成的檔案都是文字檔案,如c原始檔,html超文字檔案,xml。除此之外的其他檔案都是二進位制檔案,如word檔案doc,影象格...