C語言文字方式和二進位制方式讀寫操作的區別

2022-02-25 15:18:14 字數 5682 閱讀 6189

1樓:杭州奧道網路技術****

首先要明白一點:任何資料在記憶體中或者硬碟上的儲存都是1、0組成的序列,從硬碟、記憶體這個角度看根本不存在什麼二進位制和文字模式之分

區別稍對c語言操作檔案有了解都知道2點:1、首先應該fopen開啟檔案2、有兩類檔案操作函式,對應著二進位制模式和文字模式。

兩個模式的區別在兩個地方,這兩個地方的區別正好體現在剛才說的2點上。

1、 開啟檔案時選擇模式

使用fopen函式時,要給予第二個引數一個值,告訴fopen使用什麼模式開啟檔案。這裡的引數決定的就是第一個區別:對於字串中的\n如何處理?

教材中說,文字模式中,在儲存\n時要轉化為\r\n,讀取檔案時進行逆轉換。二進位制模式時,則不進行轉換。這是在作業系統是windows的條件下。

首先我們要知道回車和換行是不相同的,windows中文字另起一行記憶體表示為《回車》《換行》對應\r\n,而linux、unix中則是單單一個《換行》對應\n。mac中則是一個《回車》對應\r

c語言起源於unix的產生,對於檔案中的另起一行,unix採用單個\n表示。所以我們通常在輸出一個短話想換行時加一個\n就可以了,windows也是如此。到了資料從記憶體到硬碟上進行儲存時,對於unix來說,\n照樣是\n。

而windows為了防止讀取時混亂必須轉換為\r\n。mac呢,就是\r。

這就是第一區別,這個區別是體現在fopen第二個引數,跟你使用文字模式的函式還是二進位制模式的函式根本不相關!你可以做一個實驗,使用二進位制模式的函對於同樣的字串:」hello\n」,當fopen使用w引數寫入檔案,無論是fwrite還是fprintf都會對\n會進行轉換,而使用wb引數則都不進行轉換。

2、 兩種不同模式的函式

開啟檔案後,要進行資料寫入。

教材中說,使用文字模式開啟檔案,就要用fprintf寫入資料,使用二進位制模式開啟檔案,就要用fwrite寫入資料。

其實你用文字模式開啟檔案,一個字串,fprintf、fwrite都能寫入檔案,寫入還都是一樣的資料。使用兩類函式的區別其實在於數字的處理上。

對於一個數字5,你用fprintf寫入,將把數字5轉換為字元5,將其對應的ascii編碼存入儲存器,佔用1個位元組。但實際上數字5就是數字5,對應2進位制101,整形佔用4個位元組。fwrite則將這個數字在記憶體中佔用的4個位元組全部原樣寫入到硬碟中,佔4個位元組。

而同樣對於一段字串」hello」,使用ascii編碼對於fprintf和fwrite都能原樣寫到硬碟中。

同樣對於這個區別,你仍然能做個實驗,對於一個int型數字5,你如何用fprintf和fwrite寫入到硬碟中,他們對應的十六進位制碼是多少?對於一段字串你再用兩個函式分別寫到硬碟中,你看看對應的十六進位制碼是什麼。這個實驗跟你用fopen如何指定第二個引數無關。

2樓:

從檔案編碼的方式來看,檔案可分為ascii碼檔案和二進位制碼檔案兩種。 ascii檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應一個位元組

3樓:不說無所謂謂謂

二進位制讀入是byte型

文字方式,應該是按照ascii碼讀入

c語言文字方式和二進位制方式讀寫操作的區別

4樓:欒秀愛回卿

首先要明白一點:任何資料在記憶體中或者硬碟上的儲存都是1、0組成的序列,從硬碟、記憶體這個角度看根本不存在什麼二進位制和文字模式之分

區別稍對c語言操作檔案有了解都知道2點:1、首先應該fopen開啟檔案2、有兩類檔案操作函式,對應著二進位制模式和文字模式。

兩個模式的區別在兩個地方,這兩個地方的區別正好體現在剛才說的2點上。

1、開啟檔案時選擇模式

使用fopen函式時,要給予第二個引數一個值,告訴fopen使用什麼模式開啟檔案。這裡的引數決定的就是第一個區別:對於字串中的\n如何處理?

教材中說,文字模式中,在儲存\n時要轉化為\r\n,讀取檔案時進行逆轉換。二進位制模式時,則不進行轉換。這是在作業系統是windows的條件下。

首先我們要知道回車和換行是不相同的,windows中文字另起一行記憶體表示為《回車》《換行》對應\r\n,而linux、unix中則是單單一個《換行》對應\n。mac中則是一個《回車》對應\r

c語言起源於unix的產生,對於檔案中的另起一行,unix採用單個\n表示。所以我們通常在輸出一個短話想換行時加一個\n就可以了,windows也是如此。到了資料從記憶體到硬碟上進行儲存時,對於unix來說,\n照樣是\n。

而windows為了防止讀取時混亂必須轉換為\r\n。mac呢,就是\r。

這就是第一區別,這個區別是體現在fopen第二個引數,跟你使用文字模式的函式還是二進位制模式的函式根本不相關!你可以做一個實驗,使用二進位制模式的函對於同樣的字串:」hello\n」,當fopen使用w引數寫入檔案,無論是fwrite還是fprintf都會對\n會進行轉換,而使用wb引數則都不進行轉換。

2、兩種不同模式的函式

開啟檔案後,要進行資料寫入。

教材中說,使用文字模式開啟檔案,就要用fprintf寫入資料,使用二進位制模式開啟檔案,就要用fwrite寫入資料。

其實你用文字模式開啟檔案,一個字串,fprintf、fwrite都能寫入檔案,寫入還都是一樣的資料。使用兩類函式的區別其實在於數字的處理上。

對於一個數字5,你用fprintf寫入,將把數字5轉換為字元5,將其對應的ascii編碼存入儲存器,佔用1個位元組。但實際上數字5就是數字5,對應2進位制101,整形佔用4個位元組。fwrite則將這個數字在記憶體中佔用的4個位元組全部原樣寫入到硬碟中,佔4個位元組。

而同樣對於一段字串」hello」,使用ascii編碼對於fprintf和fwrite都能原樣寫到硬碟中。

同樣對於這個區別,你仍然能做個實驗,對於一個int型數字5,你如何用fprintf和fwrite寫入到硬碟中,他們對應的十六進位制碼是多少?對於一段字串你再用兩個函式分別寫到硬碟中,你看看對應的十六進位制碼是什麼。這個實驗跟你用fopen如何指定第二個引數無關。

c語言採用文字方式和二進位制方式開啟檔案的區別分析

5樓:聊德文多煙

摘錄的,你看看吧,希望有幫助!!

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

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

6樓:竭振華乘倩

fprintf

fscanf函式是對檔案ascii碼讀寫(檔案)fread

fwrite函式是對檔案二進位制讀寫

文字讀寫將檔案中的ascii碼轉換成二進位制在儲存在記憶體變數中二進位制讀寫直接將記憶體中的資料原封不動、不加轉換地複製到磁碟檔案上,讀入也是直接講磁碟中的內容讀入到記憶體,效率比文字快多了

c語言以二進位制方式開啟的檔案可以使用fread 和fwrite 讀寫,那麼以文字方式開啟的檔案用什麼函式組合??

7樓:風若遠去何人留

一樣的。

使用何種開啟方式,和你讀寫用的介面函式沒有什麼關係。

不管用什麼開啟,都可以用fread fwrite來讀寫。

二進位制和文字的區別,主要在於fgets和fputs上有區別。其它的都一樣。

8樓:

同樣可以用這對函式讀寫

只不過是開啟的方式不同而已。另外,普通對檔案的讀寫可以直接用文字方式讀寫。

二進位制傳輸可能準確度稍高而已

請說明在c語言中檔案操作文字檔案與二進位制檔案的區別。求大佬解答

9樓:匿名使用者

文字檔案讀寫時:是按行讀的。回車,換行。是一行結束的標誌。

二進位制檔案讀寫時,沒有行的概念,全是二進位制資料。可以按位元組讀,可以按struct結構讀,二進位制檔案讀寫靈活性更大。

當然,檔案內容是純文字時,按行讀寫很方便。

c語言如何讀寫二進位制

10樓:匿名使用者

詳細

11樓:興斐雷傲菡

因為你寫入的是字串,雖然是以二進位制方式寫入的,但文字編輯器還是會去一個位元組一個位元組地解釋檔案,所以結果還是文字。

你可以去嘗試寫入一些int或long的數值,只要他們的值不在ascii值之內你會很明顯地看到效果

12樓:匿名使用者

亂碼的原因是txt檔案中存放的內容是單位元組的.而你的變數是雙位元組單位的.

需要在寫檔案前將雙位元組轉換為單位元組

具體使用函式看你c語言的版本和程式設計環境.去網上找找有很多的.widetomultychar()什麼的函式就能轉化.函式名字我給忘記了.

13樓:匿名使用者

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 ;}

c語言將十進位制轉化為二進位制,c語言程式設計,如何將十進位制轉化為2進位制

十進位制轉二進位制可以使用庫函式itoa。itoa函式原型 char itoa int value,char string,int radix 功能 將任意型別的數字轉換為字串。在中與之有相反功能的函式是atoi。nt value 被轉換的整數,char string 轉換後儲存的字元陣列,int ...

c語言十進位制數轉化為二進位制數,C語言 十進位制數轉化為二進位制數

思路 十進位制整數轉換為二進位制整數採用 除2取餘,逆序排列 法。即用2整除十進位制整數,可以得到一個商和餘數 再用2去除商,又會得到一個商和餘數,如此進行,直到商為0時為止,然後把先得到的餘數作為二進位制數的低位有效位,後得到的餘數作為二進位制數的高位有效位,依次排列起來。include stdi...

二進位制0和1代表什麼,為什麼二進位制要用0和1來表示?

0 1 1 加法有四種情況 0 0 0 0 1 1 1 0 1 1 1 10 0 進位為1 例1103 求 1011 2 11 2 的和 解 1011 11 乘法有四種情況 0 0 0 1 0 0 0 1 0 1 1 1 減法0 0 0,1 0 1,1 1 0,0 1 1。除法0 1 0,1 1 1...