⑴ C/C++ 如何以二進制方式打開文件並以0,1方式讀取寫入
如果是C語言的話,用文件操作fread和fwrite函數。
可以按照位元組寫入和讀出:
FILE *fp;
unsigned char buffer; //位元組緩存內
fp = fopen("文件名", "wb");//二進制寫方式
while(一直讀到容bmp的末尾)
{
這里將bmp按照位元組讀入buffer變數中;
fwrite(&buffer, sizeof(unsigned char),1, fp);
}
這樣就完成了將任何數據以二進制位元組形式寫入文件。
讀出相反,用fread函數。
C++的話,可以使用流操作,在此不詳述。
希望能幫助你。
⑵ C語言怎麼編寫一個程序讀取任何二進制文件,並將文件內所有位元組按相反排序存入另一文件中
如果文件不大的話,可以定義一個數組,一次性將文件內容都讀出來,然後從後向前寫到新文件中,如果文件很大的話,就將文件指針定位到文件結尾的前一個位元組處,循環讀一個位元組寫入另一個文件,並將原文件指針往回移2個位元組,直到將所有位元組反向讀取完成並寫入。
#include <stdio.h>
main()
{
char c;
FILE *rfp, *wfp;
rfp = fopen("a.bin", "rb"); // 文件名自己指定
if(rfp == NULL) {
printf("文件不存在\n");
return -2;
}
wfp = fopen("b.bin", "wb");
if(wfp == NULL) {
printf("無法創建文件\n");
return -2;
}
fseek(rfp, -1, SEEK_END);
do {
fread(&c, sizeof(char), 1, rfp);
fwrite(&c, sizeof(char), 1, wfp);
} while(fseek(rfp, -2, SEEK_CUR) == 0);
fclose(rfp);
fclose(wfp);
}
⑶ c語言怎麼二進制文件操作
主要就是二進制文件的讀寫、結構體的定義和使用。
fopen函數 以 "ab+" 方式打開文件,用fwrite函數寫入內容; "b" 方式打開文件,讀取內容;
⑷ c語言怎麼讀取二進制文件
main()
{
FILE * stream;
int i;
stream = fopen("/tmp/fwrite","r");
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf("name[%d]=%-20s:size[%d]=%d/n",i,s[i].name,i,s[i].size);
}
供參考
⑸ c語言怎麼將一個單向鏈表讀寫二進制文件(fwrite和fread)。在結構有兩個以上的元素時。
Student是結構體聲明。
//從文件中讀取鏈表數據,讀取文件直到結束,new_count是統計讀取到的對象個數
Student *new_file_student_null(int *new_count)
{
Student *head=NULL,*newp,*end,*fnext;
FILE *fp;
char fname[80]; //存放文件名
*new_count=0; //暫時是讀取到0個對象
//打開要讀取的二進制文件
printf("請輸入包含路徑的文件名:\n");
gets(fname);
if((fp=fopen(fname,"rb"))==NULL)
{
printf("讀取文件%s失敗\n",fname);
exit(0);
}
//讀取文件直到文件結束:開辟一個空間,讀取一個存入該空間!
while(1)
{
//開辟新空間,空間大小為結構體Student
newp=(Student *)malloc(sizeof(Student));
if(newp==NULL) //開辟空間出問題
{
printf("開辟空間出問題\n");
exit(0); //退出整個程序
}
//鏈表連接新空間組成新鏈表
if(head==NULL) //鏈表是空時
{
head=end=newp;
}
else //鏈表非空
{
fnext=end; //fnext指向最後一個有數據的值
*new_count+=1; //已經讀取到1個有效數據,所以加1
end->next=newp;
end=newp;
}
//讀取文件存入新開辟的空間。
//讀取完文件獲得0值,需要對最後一個有效值設置next指向NULL,以及釋放最後一塊開辟的內存newp,並且退出死循環
if(fread(end,sizeof(Student),1,fp)==0)
{
if(head==newp)head=NULL; //newp是准備釋放的最後一個,head指向它表示前邊沒有有效數據,即沒有任何數據,理應指向NULL
else fnext->next=NULL; //最後一個有效值的next指向NULL
free(newp); //最後一個有效值在newp之前,即newp這個新開辟的空間沒有使用到。
break;
}
}
fclose(fp); //關閉文件
return (head);
}
//鏈表全部數據保存到指定的二進制文件中,返回鏈表對象數量
int save_student(Student *head)
{
Student *p; //逐個讀取鏈表對象
FILE *fp;
char fname[80]={0}; //存放輸入的文件路勁名稱
int count=0; //暫時保存到0個對象
//打開文件
printf("請輸入要保存的文件名路徑\n");
gets(fname);
if((fp=fopen(fname,"wb"))==NULL) //打開文件准備寫入二進制文件
{
printf("打開文件%s失敗",fname);
exit(0); //退出整個程序
}
//鏈表保存到文件
for(p=head;p!=NULL;p=p->next)
{
count+=fwrite(p,sizeof(Student),1,fp);
}
fclose(fp); //關閉文件
return (count);
}
⑹ C語言怎麼讀取二進制文件中的數據放到一個300×300的二維數組裡面
用 fopen 打開文件時 設 "rb" --用二進制方法打開,用於讀
用 fread 讀取數據,函數原型是:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
各參數意義,請查編譯器幫助文件,這里就不開課了。
300×300 的數組需要的內存量較大,可動態分配,或用 全局量。
下面是程序例子。先建了一個2進制文件,裡面存了300*300個float型數據。然後讀這個文件里的內容。
#include<stdio.h>
float a[300][300];
int main()
{
FILE *fin, *fout;
int i,j;
for (j=0;j<300;j++) for (i=0;i<300;i++) a[j][i]=j*100+i;
fout=fopen("a.txt","wb");
for (j=0;j<300;j++)
fwrite(&a[j][0],sizeof(float),300,fout);
fclose(fout);
for (j=0;j<300;j++) for (i=0;i<300;i++) a[j][i]=0; //數組清零
fin=fopen("a.txt","rb"); //打開輸入文件
for (j=0;j<300;j++)
fread(&a[j][0],sizeof(float),300,fin); //讀文件
fclose(fin); //關閉文件
// 下面輸出文件的左上角100個數據,和右下角100個數據供檢查參考。
for (j=0;j<10;j++) {
for (i=0;i<10;i++)printf("%3.0f ",a[j][i]); printf("\n");}
printf("\n");
for (j=290;j<300;j++){
for (i=290;i<300;i++)printf("%g ",a[j][i]); printf("\n");}
return 0;
}
⑺ C語言二進制文件的讀取問題
抄C語言中二進制文件的讀取要用fread和fwrite來實現。
fwrite()與fprintf()是不同的。
fwrite將寫入的數據作為文件的磁碟內容保存。fprintf將寫入的數據的每個字元所對應的ASCII碼作為文件的磁碟內容保存。fprintf做了一個轉換的工作。
當打開文件時,記事本會自動把文件的磁碟內容作為ASCII碼轉換成對應的字元,然後再顯示出來,即顯示的是文本內容而不是磁碟內容。
例如,用fwrite向文件寫入「65」時,文件的磁碟內容就是保存的65(磁碟上以二進製表示)。當用記事本打開文件時,記事本會讀到65,並把65看作一個ASCII碼,再把對應的字元「A」顯示出來。因此屏幕上看到的文本內容是「A」。
而用fprintf向文件寫入「65」時,文件的磁碟內容保存的是「6」和「5」這兩個字元對應的ASCII碼,分別是54和53。因此文件的磁碟內容是54和53。當用記事本打開文件時,記事本讀到54,就顯示出對應的「6」。再讀到53,就顯示出對應的「5」。
⑻ C對二進制文件操作
C對二進制文件讀寫操作,可以用fread函數和fwrite函數實現;
1.函數功能
用來讀寫一個數據塊。
2.一般調用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.說明
(1)buffer:是一個指針,對fread來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址。
(2)size:要讀寫的位元組數;
(3)count:要進行讀寫多少個size位元組的數據項;
(4)fp:文件型指針。
注意:1 完成次寫操(fwrite())作後必須關閉流(fclose());
2 完成一次讀操作(fread())後,如果沒有關閉流(fclose()),則指針(FILE * fp)自動向後移動前一次讀寫的長度,不關閉流繼續下一次讀操作則接著上次的輸出繼續輸出;
3 fprintf() : 按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不過不是寫到控制台,而是寫到流罷了。
注意的是返回值為此次操作寫入到文件的位元組數。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10位元組;str2: 10位元組;a:2位元組;b:8位元組,c為33,因為寫入時不同的數據間自動加入一個空格。