文本流和二进制流
发布日期:2021-06-29 04:57:01 浏览次数:2 分类:技术文章

本文共 1591 字,大约阅读时间需要 5 分钟。

1、C中引入流的概念,将数据的数据的输入输出看作是数据的流入和流出,这样不管是磁盘文件或者是物理设备(打印机、显示器、键盘等),都可看作是数据流的源和目的。抽象为一种流,更有利于编程,具体涉及数据流的输入输出可用作各种对象。

2、在C中流可分为两类,文本流和二进制流。计算机的存储在物理上是二进制的,文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。

2、1文本流指的是在流动中的数据是以字符形式出现的。在文本流中,'\n'被换成回车和换行的0DH和0AH。当输出时,则0DH和0AH本换成'\n'。

2、2二进制流的流动的是二进制序列,若流中有字符,则由一个字节的二进制ASCII码表示,若是数字则用一个字节的二进制数字表示。在流入流出时,对\n符号不进行转换。

2、3例如2001这个数,在文本流中用其ASCII码表示为:

'2' '0' '0' '1'

| | | |
50 48 48 49
共占4字节。而在二进制流中则表示为:00000111 11010001 用十六进制就是07D1。只占两字节。由此看出,二进制流比文本流节省空间,且不用进行对\n的转换,这样可以大大加快流的速度,提高效率。因而,对于含有大量数字信息的数字流,可以采用二进制流的方式;对于含有大量字符信息的流,则采用文本流的方式。

3、读文本内容然后打印出来

FILE *openfile(char *p,char *m)

{
    char buf[256];
FILE *f;
/*printf("%s 文件",p);
if(gets(buf)==NULL)
{
   fprintf(stderr,"丢失了%s文件名。\n",p);
exit(EXIT_FAILURE);
}*/
if(strcmp(p,"输入")==0)
{
    strcpy(buf,"C:\\Users\\acer\\Desktop\\test1.txt");
}
else if(strcmp(p,"输出")==0)
{
    strcpy(buf,"C:\\Users\\acer\\Desktop\\test2.txt");
}
else
{
    fprintf(stderr,"丢失了%s文件名。\n",p);
exit(EXIT_FAILURE);
}
if((f=fopen(buf,m))==NULL)
{
   perror(buf);
exit(EXIT_FAILURE);
}
return f;
}
int fun(int value);
int main(int argc,char **argv)
{
    char buffer[512];
FILE *input;
input=openfile("输入","r");
while(fgets(buffer,512,input)!=NULL)
{
   int age[10];
int members;
int sum;
int i;
members=sscanf(buffer,"%d %d %d %d %d %d %d %d %d %d",
age,age+1,age+2,age+3,age+4,age+5,age+6,age+7,age+8,age+9);
if(members==0)
continue;
sum=0;
for(i=0;i<members;i+=1)
sum+=age[i];
printf("%5.2f :%s",(double)sum/members,buffer);
}
fclose(input);
return EXIT_SUCCESS;
}

转载地址:https://blog.csdn.net/zhang_yin_liang/article/details/52371847 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:数据结构堆栈和队列
下一篇:结构体定义与作为函数参数的结构

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月22日 07时04分24秒