c語言二進制文件
Ⅰ c語言讀取二進制數據文件
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 <stdlib.h>
#include <stdio.h>
int main ()
{
FILE * fpPhoto, * fpText, * fpTarget ;
int iRead ;
char szBuf[100] ;
printf ("請輸入第一個文件名(jpg):\n") ;
gets (szBuf) ;
fpPhoto = fopen (szBuf, "rb") ;
printf ("請輸入第二個文件名(txt):\n") ;
gets (szBuf) ;
fpText = fopen (szBuf, "rb") ;
printf ("請輸入目的文件名(jpg):\n") ;
gets (szBuf) ;
fpTarget = fopen (szBuf, "wb") ;
if (!fpPhoto || !fpText || !fpTarget)
{
printf ("打開文件失敗!\n") ;
system("pause") ;
return -1 ;
}
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語言文件把數據看作是一連串的字元(位元組)。C語言文件是一個字元(位元組)的序列,是一字元流或位元組流,是一種流式文件。根據數據的組織形式,可分為文本文件和二進制文件。
文本文件又稱為ASCII文件,每一個位元組中存放一個ASCII代碼,代表一個字元。例如,一個整數123,若用.ASCII文件存放,佔3個位元組的
存儲
單元,1、2、3各用一個位元組
存儲
。而1、2、3的ASCII碼分別為49、50、51,故123用ASCII文件存放時,存放形式為001100010011001000110011。
二進制文件是直接用數據的二進制形式存放。例如,對整數123,二進制為0000000001111011,用二進制文件存放,需2個位元組,存放形式為0000000001111011。
使用ASCII碼文件,一個位元組代表一個字元,便於對字元一一處理和輸出,但佔用較多的存儲空間,並且要花費轉換時間(ASCII碼與二進制之間的轉換)。使用二進制文件,
在內存中的數據形式與輸出到外部文件中的數據形式完全一致,可以克服ASCII文件的缺點,但不直觀,一個位元組並不對應一個字元或一個數,不能直接輸出字元形式。一般中間數據用二進制文件保存,輸入輸出使用ASCII文件。
Ⅲ c語言是如何編譯成二進制
計算機專業有門課程叫做《編譯原理》,詳細講述了怎麼把高級語言翻譯成匯編語言活著機器能看懂的二進制代碼。
簡單的說,C語言是通過編譯器翻譯成二進制代碼的(就像英譯漢的軟體把英文翻譯成漢語一樣。把高級語言翻譯成機器語言過程很復雜,學了編譯原理就懂了)。還有編譯器可以用各種語言編寫,C語言可以被用C語言寫的編譯器來編譯。
Ⅳ 在c語言中如何打開二進制文件
文本文件和二進制文件就是一個聲明,指明了你應該以什麼方式(文本方式/二進制)打開這個文件,用什麼函數讀寫這個文件(讀寫函數),怎麼判斷讀到這個文件結尾。
具體的說:
C規定了標准輸入輸出函數庫,用fopen()函數打開文件。fopen()函數的調用方式一般為:
FILE*fp;//定義一個文件類型的指針變數fp
fp=fopen(文件名,使用文件方式);
使用文件方式見下表:
"r"(只讀) 為輸入打開一個文本文件
"w"(只寫) 為輸出打開一個文本文件
"a"(追加) 為追加打開一個文本文件
"rb"(只讀) 為輸入打開一個二進制文件
"wb"(只寫) 為輸出打開一個二進制文件
"ab"(追加) 為追加打開一個二進制文件
"r+"(讀寫) 為讀/寫打開一個文本文件
"w+"(讀寫) 為讀/寫創建一個文本文件
"a+"(讀寫) 為讀/寫打開一個文本文件
"rb+"(讀寫) 為讀/寫打開一個二進制文件
"wb+"(讀寫) 為讀/寫創建一個二進制文件
"ab+"(讀寫) 為讀/寫打開一個二進制文件
Ⅳ c語言如何創建二進制文件
在windows系統下,C語言打開文件的"文本文件"方式和"二進制文件方式"的區別是:
在文本文件模式下:當給文件寫入'\n'時,實際會寫入'\r''\n',讀文件時如果讀到\r\n,會丟棄\r只保留\n, 除此以外,和二進制方式沒有任何區別
舉例:
FILE* fp;
fp = fopen("123", "w");
fputc(10,fp); //10就是\n 但實際上會對文件寫入\r\n,你用16進制編輯器打開123,會看到0D0A 兩個字元
fclose(fp);
甚至這樣:
fp = fopen("123", "w");
int n = 1116682; //這是16進制的0x110A0A
fwrite(&n, 4, 1, fp); //因為那數字位元組里有0A,寫入時會擠進去0D實際寫入0D0A0D0A1100
fclose(fp);
而這樣就只寫入0A
fp = fopen("123", "wb");
fputc(10,fp); //只寫入0A
至於你看到的"仍是文本文件",是因為你對文件寫入的內容就是些文本而已
所有文件都是二進制的,文本文件只是文件的內容都是些ASCII或者unicode等可讀的字元而已
Ⅵ c語言怎麼二進制文件操作
主要就是二進制文件的讀寫、結構體的定義和使用。
fopen函數 以 "ab+" 方式打開文件,用fwrite函數寫入內容; "b" 方式打開文件,讀取內容;