二進位制檔案和文字檔案讀取的區別小議

2021-06-16 20:27:03 字數 1797 閱讀 4615

在學習了檔案的輸入和輸出之後,本人一直存在乙個疑問,我想可能也是好多人的疑問。那就是二進位制檔案和文字檔案中的內容到底是怎麼讀寫的?我們為什麼開啟二進位制檔案看到的是一些亂碼?

由於今天的時間充足,編找了一點相關資料,並總結了一下。

檔案在計算機中儲存的資訊是由1或0表示的,所以按照嚴格意義來說,兩者不存在根本區別。

但是兩者之間又有區別:

個人認為,他們最大的區別是文字檔案屬於字元編碼,而二進位制檔案屬於字串編碼。

下面我們看個例子:

#includeint main(void)

p = #

fprintf(fp,"%s\n","52761");

fprintf(fp,"%d\n",*p);

fclose(fp);

if((fp = fopen("binary","wb")) == null)

fwrite(p, sizeof(int), 1, fp);

fwrite(c,sizeof(c),sizeof(c)/sizeof(char),fp);

fclose(fp);

return 0;

}

接下來,我在win7的作業系統32位機的環境下,我用ultraedit分別檢視txt.txt和binary兩個檔案裡的內容:

其中txt.txt中儲存的內容如下:

相信你已經注意到了,無論我是用十進位制格式輸出還是字串格式輸出,其儲存內容全部都是將各個數字轉化為字元進行儲存的。但是,仔細的你會發現,怎麼每個後面都有0d和0a呢!我們知道,0a代表『\n』,我們在輸出的時候都加了『\n』,所以有他便不足為奇了,但是怎麼又有0d呢!

下面我就摘抄一段《c primer plus》(第五版  355頁)裡的一段話,幫助大家理解:ansi 要求提供的兩種檔案檢視是檔案檢視和二進位制檢視。在二進位制檢視中,檔案的每個位元組都可以為程式所訪問。在文字檢視中,程式看到的內容和檔案的內容有可能不同。例如,使用文字檢視讀取檔案時,將吧行尾的本地環境表示法對映為c檢視。與之類似,在輸出的時候,也會將c檢視中的行尾表示對映為本地環境表示法。例如,ms-dos文字檔案用回車符合換行符的組合\r\n來表示行尾。macintosh文字檔案只用乙個回車\r來表示行尾。c程式使用乙個\n表示行尾。所以,如果c程式以文字檢視模式處理乙個ms-dos文字檔案,在讀取檔案時,它會將\r\n轉化為\n,在寫入檔案的時候,它會將\n轉化為\r\n;而對於macintosh文字檔案的文字檢視,讀取檔案時它會將\r轉化為\n,在寫入檔案的時候他會將\n轉化為\r。看到這,我相信,你就不難理解為什麼還出現\r了。

binary中儲存的內容如下:

接下來,我們再看看二進位制檔案中的儲存內容。如你所見19 ce所對應的內容正好是我們所不懂的,且稱之為亂碼的內容。其實 19 ce就是52761的實際值而已。而後面的數字,是對應的字串對映到記憶體中,再由記憶體中儲存的內容寫入在檔案裡,因此,這一串字串是我們能夠讀懂的,當然也就清楚的說明了,為什麼,開啟乙個二進位制檔案時,我們可以看到一些,我們能夠看得懂的內容。

總結:從這,我們可以這樣想,其實,在你儲存檔案時,作業系統並不會讓你每輸入乙個值就寫到檔案中(不然多次進行內部裝置與外部裝置之間的輪換讀取,這效率也太低了),而是會給你分配一段緩衝區,二進位制檔案就是講緩衝區的內容原封不動的放進檔案;文字檔案卻是在你每一次輸入之後,將你輸入的值轉換為對應的編碼值再存放在檔案中。在這,我們也可以看出處理兩檔案是的效率問題了。

二進位制檔案和文字檔案

通常,我們喜歡把檔案分為二進位制檔案 binary file 和文字檔案 text file 兩類。但事實上,所有檔案在計算機上都是以二進位制方式進行儲存的,因此二者並無本質上的區別,它們的區別僅在於對檔案內容的解釋方式上。a 文字檔案,就是根據字元編碼規則解碼後,能夠全部解碼為文字字元的 二進位制...

VC 二進位制檔案和文字檔案

檔案在計算機記憶體中以二進位制表示的資料在外部儲存介質上的另一種存放形式。檔案通常分為二進位制檔案和文字檔案。二進位制檔案是包含在 ascii 及擴充套件 ascii 字元中編寫的資料或程式指令的檔案。一般是可執行程式 圖形 圖象 聲音等等檔案。文字檔案 也稱為ascii檔案 它的每乙個位元組存放的...

二進位制檔案和文字檔案的區別

原文 一 文字檔案與二進位制檔案的定義 將檔案看作是由乙個乙個位元組 byte 組成的,那麼文字檔案中的每個位元組的最高位都是0,也就是說文字檔案使用了乙個位元組中的七位來表示所有的資訊,而二進位制檔案則是將位元組中的所有位都用上了。這就是兩者的區別 接著,第二個問題就是檔案按照文字方式或者二進位制...