大家好,很高兴又和大家见面啦!!!
在上一篇内容中我们介绍了什么是文件,为什么要使用文件,以及如何操作文件:
在今天的内容中我们将会认识文件在计算机中的存储形式,接下来我们就直接进入正题……
根据数据的组织形式,数据⽂件被称为⽂本⽂件或者⼆进制⽂件。
数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制⽂件。 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂ 本⽂件。
计算机中存储的数据大致可以分为两类:字符型数据、数值型数据。
那么我们如何来区分这两种数据呢?
这里我们可以简单的理解为:除了1,2,3,4……这些整数以及1.1,3.14,0.02……这些浮点数外,其它的数据均为字符。
在计算机中,字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。
这里我们以整型数据123456为例,来说明数值型数据在计算机中的组织形式。
在说明数值型数据的组织形式之前,我们需要有一个共识:
这是因为计算机只能够识别二进制,也就是我们所说的机器语言。
我们现在所说的文件的组织形式并不是指的数据在内存中的存储形式,而是指计算机上的各种类型的文件所对应的数据形式。
在计算机中,整数所对应的二进制形式有三种——原码,反码与补码。并且整数的数据在进行存储时都是以补码的形式存储在内存中。
在32位的机器上,整数123456的三种二进制形式分别为:
0000 0000 0000 0001 1110 0010 0100 0000
0111 1111 1111 1110 0001 1101 1011 1111
0111 1111 1111 1110 0001 1101 1100 0000
当数据直接以补码的形式存储到文件中时,得到的文件就是一个二进制文件,此时的文件计算机是能够正常识别的,但是我们无法直接对这些文件进行识别;
整数123456在计算机中同样的可以通过字符的形式进行存储,即"123456"
,此时其所对应的二进制数据则变成了每一个字符所对应的ASCII码值:
'1'
——0011 0001
'2'
——0011 0010
'3'
——0011 0011
'4'
——0011 0100
'5'
——0011 0101
'6'
——0011 0110
这些字符在内存中同样是以对应的二进制进行存储,但是在文件中,他们则是以二进制的ASCII码值所对应的字符存储在文件中,这时得到的文件就是一个文本文件,此时的文件计算机时无法正常识别的,但是我们可以直接读取文件上的内容;
为了更加直观的辨析文本文件与二进制文件之间的区别,这里我们以一段简单的代码为例,如下所示:
void test1() {
printf("good bye 2024!!!");
Sleep(1000);
system("cls");
printf("hello 2025!!!");
Sleep(1000);
system("cls");
}
在我们输入这段代码前,我们需要在VS中创建一个.c
的文件,当我们在VS中输入这段代码,并通过main
函数进行运行后,我们会得到一个.exe
的文件,下面我们就分别将这两个文件通过记事本来进行读取文件中的数据:
可以看到,此时我们通过即使本打开这个.c的文件时,记事本中记录的数据正是我们输入的代码,也就是说,这些数据我们是可以直接读取的;
但是当我们打开.exe
的文件时,我们可以看到记事本中呈现的数据是乱码的,这是因为.exe
的文件是一个二进制文件,我们无法用文本文件的阅读方式进行数据的读取,那有没有什么方法能够看到它的具体内容呢?
这里我们可以借助Notepad++
这个文本编辑器,通过在插件管理中搜索并安装HEX-Editor
这个插件,之后再将.exe
这个文件通过该插件的功能View in HEX
进行阅读,就可以得到了它的实际存储的数据:
此时我们就可以看到,该文件中的数据就是计算机能够识别的二进制编码,如果不通过转换直接输出到外存的话,我们是无法直接识别的。
在今天的内容中我们介绍了文件的存储形式,现在大家应该就很清楚文本文件与二进制文件之间的区别了。接下来我们就来看一下我们应该如何通过C语言来实现对文件的一系列操作;
今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《C语言实现文件操作》,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!