二进制文件(模式)与文本文件(模式)的区别

    技术2022-05-12  11

     

    二进制文件和文本文件

    n       文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。

    n       文件通常分为二进制文件和文本文件。

    n       二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。

    n       文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件。 

    n       当我们按照文本方式往文件中写入数据时,一旦遇到换行字符(ASCII10),则会转换为回车-换行(ASCII1310)。在读取文件时,一旦遇到回车-换行的组合(即连续的ASCII 1310),则会转换为换行字符(ASCII10)

    n       当我们按照二进制方式往文件中写入数据,则将数据在内存中的存储形式原样输出到文件中。

    下面分别介绍文件操作中的几个重要的输入输出函。假设要求输出的数据为int outdata=0x100D0AFD(outdata的十进制为:269290237;在Windowsint型变量占4个字节)

    l         文本模式:

    fprintf(FILE *stream ,“%d”,outdata)的实际输出字节系列为:0x32,0x36,0x39,0x32,0x39, 0x30,0x32,0x33,0x37

    fwrite( (void *)&outdata, 4, 1, FILE *stream ) 的实际输出字节系列为:0x10,0x0D,0x0D,0x0A,0xFD;

    l         二进制模式:

    fprintf(FILE *stream ,“%d”,outdata)的实际输出字节系列为0x32,0x36,0x39,0x32,0x39, 0x30,0x32,0x33,0x37

    fwrite( (void *)&outdata, 4, 1, FILE *stream ) 的实际输出字节系列为:0x10,0x0D,0x0A,0xFD;

    下面介绍一个特殊的函数:fscanf( FILE *stream, const char *format [, argument ]... );它的作用是格式化读入文件内容。假如一文件的内空为“12345     123ab”(其中有5个空格,实际上可在任意多个),假设文件指针当前处于文件头部。执行fscanf( FILE *stream, “%d”,&outdata ),outdat的值为12345,再次执行,outdata的值为123.由此可见当要读入一个数值型变量时,它总是从文件的当前指针开始读入,遇到非数字字符便停止读入,然后将读入的数字字符串转换为数值存入数字变量中。现在复位文件指针变量到文件开始位置。执行fscanf( FILE *stream, “%s”,str ),字符串变量的内容为字符串”123456”,再次执行,str的内容变为”123ab”,由此可见要读入一个字符串时,它总是从当前位置读入,当遇到空格(下次读入时文件指针自动跳到非空格或非TAB字符)TAB键时便停止读入。

           由上可知,fprintffscanf函数的执行不受文件打开模式的影响,它们总是将要读入或输出的内容当作文本处理,也可以认为这两个函数只工作在文本模式。对fprintf函,它总是将要输出的内容转化为字符串输出。如果对以上的阐述还不明了,可以查看printfscanf函数,它们与这两个函数的工作原理完全一样,只是printfscanf所用到的输入输出设备为显示器和键盘,而fprintffscanf所用的输入设备都为文件。


    最新回复(0)