当前位置: 首页 > news >正文

【C语言加油站】文件存储形式全解析:文本文件与二进制文件的本质区别

文件的存储形式

  • 导读
  • 一、文件的存储形式
    • 1.1 数值型数据的组织形式
    • 1.2 文本文件与二进制文件
  • 结语

封面

导读

大家好,很高兴又和大家见面啦!!!

在上一篇内容中我们介绍了什么是文件,为什么要使用文件,以及如何操作文件:

  • 文件就是以硬件为载体,存储在计算机上的信息集合;
  • 为了让信息的存储、读取、删除更加的方便,所以我们需要有文件来存储这些数据;
  • 在计算机中,文件有创建、销毁、读取、写入等基本操作;

在今天的内容中我们将会认识文件在计算机中的存储形式,接下来我们就直接进入正题……

一、文件的存储形式

根据数据的组织形式,数据⽂件被称为⽂本⽂件或者⼆进制⽂件

数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制⽂件。
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂
本⽂件。

计算机中存储的数据大致可以分为两类:字符型数据、数值型数据。

那么我们如何来区分这两种数据呢?

这里我们可以简单的理解为:除了1,2,3,4……这些整数以及1.1,3.14,0.02……这些浮点数外,其它的数据均为字符。

在计算机中,字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。

这里我们以整型数据123456为例,来说明数值型数据在计算机中的组织形式。

1.1 数值型数据的组织形式

在说明数值型数据的组织形式之前,我们需要有一个共识:

  • 数据在内存中都是以二进制的形式进行存储的

这是因为计算机只能够识别二进制,也就是我们所说的机器语言。

我们现在所说的文件的组织形式并不是指的数据在内存中的存储形式,而是指计算机上的各种类型的文件所对应的数据形式。

在计算机中,整数所对应的二进制形式有三种——原码,反码与补码。并且整数的数据在进行存储时都是以补码的形式存储在内存中。

在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码值所对应的字符存储在文件中,这时得到的文件就是一个文本文件,此时的文件计算机时无法正常识别的,但是我们可以直接读取文件上的内容;

1.2 文本文件与二进制文件

为了更加直观的辨析文本文件与二进制文件之间的区别,这里我们以一段简单的代码为例,如下所示:

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语言实现文件操作》,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!

http://www.dtcms.com/a/122288.html

相关文章:

  • 【创新实训个人博客】prompt嵌入
  • linux shell looop循环写法
  • 回溯——固定套路 | 面试算法12道
  • 研究嵌入式软件架构时遇到的初始化堆栈溢出问题
  • 用Python爬虫抓取数据并保存为JSON的完整指南
  • GitHub 克隆/下载失败的解决方案
  • NOIP2011提高组.玛雅游戏
  • 【AAOS】【源码分析】CarAudioService(二)-- 功能介绍
  • 单旋翼无人机(直升机)和四旋翼无人机优势对比
  • 2.BGP水平分割
  • VS Code Markdown渲染配置
  • vue+d3js+fastapi实现天气柱状图折线图饼图
  • XXE漏洞深度解析:原理、利用与防御
  • 详细解读react框架中的hooks
  • 从零推导飞机小扰动运动线性方程——0. 学习目录
  • Git版本管理系列:(二)多分支操作
  • 数据结构与算法-图论-复习2(差分约束,强连通分量,二分图,LCA,拓扑排序,欧拉路径和欧拉回路)
  • 使用stream的Collectors.toMap()方法常见问题
  • 数字电子技术基础(四十一)——数据选择器
  • 【Python教程】Python爬虫代码实现Java核心数据整理
  • python 如何安装wxpython
  • Meta 最新 AI 模型系列 ——Llama 4
  • COM通信 - TJA1145收发器
  • 数字图像处理作业2
  • 【回眸】Linux 内核 (十六) 之 多线程编程 下
  • 基于Python的心衰疾病数据可视化分析系统
  • 【论文精读】Multi-scale Neighbourhood Feature Interaction Network
  • JavaScript Hook JSON.stringify和JSON.parse:逆向与修改实战指南
  • AWS弹性容器服务(AWS Elastic Container Service,ECS)概述
  • js中this指向问题