⑴ 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,因为写入时不同的数据间自动加入一个空格。