文件管理 · 2023年8月15日

c读入二进制文件|C对二进制文件操作

⑴ 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){//开辟新空间,空间大小为结构体Studentnewp=(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个有效数据,所以加1end->next=newp;end=newp;}//读取文件存入新开辟的空间。//读取完文件获得0值,需要对最后一个有效值设置next指向NULL,以及释放最后一块开辟的内存newp,并且退出死循环if(fread(end,sizeof(Student),1,fp)==0){if(head==newp)head=NULL;//newp是准备释放的最后一个,head指向它表示前边没有有效数据,即没有任何数据,理应指向NULLelse fnext->next=NULL;//最后一个有效值的next指向NULLfree(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,因为写入时不同的数据间自动加入一个空格。