文本文件和二进制文件

文本文件

文本文件是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。 特别的是,文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息,因此文本文件不能存储声音、动画、图像、视频等信息。

设某个文件的内容是下面一行文字:中华人民共和国 CHINA 1949。 如果以文本方式存储,机器中存储的是下面的代码(以十六进制表示,机器内部仍以二进制方式存储):
D6 D0 BB AA C8 CB C3 F1 B9 B2 BA CD B9 FA 20 43 48 49 4E 41 20 31 39 34 39 A1 A3
其中,D6D0、BBAA、C8CB、C3F1、B9B2、BACD、B9FA分别是“中华人民共和国ABCD” 七个汉字的机内码,20是空格的ASCII码,43、48、49、4E、41分别是五个英文字母“CHINA”的ASCII码,31、39、34、39分别是数字字符“1949”的ASCII编码,A1A3是标点“。”的机内码。
从上面可以看出,文本文件中信息是按单个字符编码存储的,如1949分别存储“1”、“9”、“4”、“9”这四个字符的ASCII编码,如果将1949存储为079D(对应二进制为0000 0111 1001 1101,即十进制1949的等值数),则该文件一定不是文本文件。

二进制文件

文件作为信息存储的一个基本单位,根据其存储信息的方式不同,分为文本文件(又名ASCII文件)和二进制文件。如果将存储的信息采用字符串方式(所有内容都按字符来处理)来保存,那么称此类文件为文本文件。如果将存储的信息严格按其在内存中的存储形式来保存(例如字符则是ASCII值对应的二进制补码;数字是按数字本身的value对应的二进制补码),则称此类文件为二进制文件。例如下面的一段信息:
“This is 1000”
在C语言中,分别采用字符串和整数来表示上面的字符串,如下:

char szText[]=”This is ”; int a=1000;
其中“This is”为一个字符串,1000为整型数据。
假设这两个数据在内存中是连续存放的。
如果是二进制编码存储,则其二进制编码的十六进制形式为:
54 68 69 73 20 69 73 20 00 03 E8       -----注意,00是”This is ”结束符'\0'的码值
如果是ASCII编码来存储,则编码后的ASCII码对应的二进制编码的十六进制形式为:
54 68 69 73 20 69 73 20 00 31 30 30 30

如果上述信息保存到文件中是按
54 68 69 73 20 69 73 20 00 03 E8 形式来存储,则称此文件为二进制文件。
如果是按 54 68 69 73 20 69 73 20 00 31 30 30 30 形式来存储,则称此文件为文本文件。
在C语言中,把文件看作一组字符或二进制数据的集合,也称为“数据流”。“数据流”的结束标志为-1,在C语言中,规定文件的结束标志为EOF。EOF为一符号常量,其定义在头文件“stdio.h”中,形式如下:
#define EOF (-1) /* End of file indicator */

注:

无论是二进制文件还是文本文件,其内容在内存中的存储形式都是二进制补码。

二进制文本中,数值数据不用转换为ASCII码,而是直接按自己本身的value来转换为对应的二进制补码;字母还是先转化为ASCII码,然后再用二进制补码表示(字符对应的原码和补码相同)。

你可能感兴趣的:(c,File,存储,语言)