信息,就是位+上下文
- 计算机系统是由硬件和软件系统组成的,它们共同工作来运行应用程序
hello.c
#include <stdio.h>int main(){printf("Hello World~");return 0;
}
hello程序的生命周期是从一个源程序(或者说源文件)开始的,即程序员通过编辑器创建并保存的文本文件,文件名是hello.c。源程序实际上就是一个由值0和1组成的位(比特)序列,8个位组成一个字节。每个字节表示程序中的某些文本字符。
1字节(Byte)=8比特(bit)
1B = 8b
大部分现代计算机系统都是用ascll标准来表示文本字符,用一个惟一的单字节大小的整数值来表示每个字符。
ASCLL码表
hello.c程序是以字节序列的方式存储在文件中的。每个二进制的字节对应着一个十进制的整数,也对应着某个相对应的字符。像hello.c这种只由ASCLL字符构成的文件称为文本文件,所有其他文件统称为二进制文件。
hello.c的表示方法说明了一个基本思想:
系统中所有的信息,包括磁盘文件、内存中的程序、内存中存放的用户数据 以及 网络上传送的数据,都是由一串比特(位)表示的。
区分不同数据对象的唯一方法是读到这些数据对象时的上下文。 比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。
假设有一个字节序列 “01000001 01000010 01000011”。
如果在处理文本的上下文中,这可能被解释为字符串 “ABC”,因为在 ASCII 编码中,“01000001” 代表字符 “A”,“01000010” 代表字符 “B”,“01000011” 代表字符 “C”。
如果在处理整数的上下文中,假设这是一个小端序的整数表示,把这三个字节看作一个 24 位的整数,那么这个序列可能表示整数 16849987(二进制为 010000010100001001000011)。
如果在处理机器指令的上下文中,这三个字节可能对应特定的机器指令操作码和操作数,具体含义取决于特定的处理器架构和指令集。
什么是文本文件和二进制文件
简单区分
区分文本文件和二进制文件可以通过以下几个简单的方法:
- 文件扩展名
- 文本文件:通常使用
.txt
、.c
、.cpp
、.py
、.java
等扩展名。 - 二进制文件:通常使用
.exe
、.bin
、.jpg
、.mp3
、.pdf
等扩展名。
- 打开方式
- 文本文件:可以使用任何文本编辑器(如记事本、VS Code、Sublime Text)打开,内容通常是可读的文本。
- 二进制文件:使用文本编辑器打开时,内容通常是乱码或不可读的字符,需要使用特定的软件(如图片查看器、音频播放器、PDF阅读器)来打开。
- 文件内容
- 文本文件:内容由可打印的字符组成,通常包含字母、数字、符号等。
- 二进制文件:内容由二进制数据组成,可能包含不可打印的字符和控制字符。
- 文件大小
- 文本文件:通常文件大小较小,因为文本文件只包含字符数据。
- 二进制文件:文件大小可能较大,因为二进制文件可能包含图像、音频、视频等多媒体数据。
- 编辑方式
- 文本文件:可以直接编辑和修改,修改后通常不会影响文件的结构。
- 二进制文件:直接编辑可能会破坏文件的结构,导致文件无法正常使用。
示例
假设你有一个文件 example.txt
和一个文件 example.jpg
:
-
example.txt
:- 扩展名是
.txt
,通常是文本文件。 - 使用记事本打开,内容是可读的文本。
- 文件大小较小。
- 扩展名是
-
example.jpg
:- 扩展名是
.jpg
,通常是二进制文件。 - 使用记事本打开,内容是乱码。
- 文件大小可能较大。
- 扩展名是
总结
通过文件扩展名、打开方式、文件内容、文件大小和编辑方式,可以简单地区分文本文件和二进制文件。文本文件通常是可读的、可编辑的,而二进制文件通常需要特定的软件来打开和处理。
从二者本质上去区分
从本质上区分文本文件和二进制文件,我们需要深入理解它们在计算机中的存储方式和数据表示方式。
- 数据表示方式
-
文本文件:
- 文本文件中的数据是以字符编码的形式存储的,如ASCII、UTF-8、UTF-16等。
- 每个字符对应一个或多个字节(取决于编码方式),字符是人类可读的。
- 文本文件中的数据可以直接通过字符编码表(如ASCII表)转换为人类可读的字符。
-
二进制文件:
- 二进制文件中的数据是以二进制形式存储的,即0和1的序列。
- 数据不一定是人类可读的,可能包含图像、音频、视频、可执行程序等。
- 二进制文件中的数据通常需要特定的软件或程序来解析和处理。
- 文件结构
-
文本文件:
- 文本文件通常有简单的结构,如行、段落等。
- 文本文件中的数据可以逐行读取和处理。
- 文本文件的结构相对简单,易于解析。
-
二进制文件:
- 二进制文件的结构通常更为复杂,可能包含多个数据块、元数据、校验和等。
- 二进制文件的结构需要特定的格式规范(如JPEG、MP3、EXE文件格式)来解析。
- 二进制文件的结构复杂,解析难度较大。
- 数据处理方式
-
文本文件:
- 文本文件的数据可以直接通过字符串操作进行处理,如查找、替换、分割等。
- 文本文件的数据处理通常涉及字符编码的转换。
-
二进制文件:
- 二进制文件的数据处理通常涉及位操作、字节操作等。
- 二进制文件的数据处理需要了解文件的格式和结构,通常需要编写专门的解析程序。
- 示例
-
文本文件示例:
- 文件内容:
Hello, World!
- 存储形式:在UTF-8编码下,每个字符占用1个字节,总共13个字节。
- 数据表示:
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
(十六进制表示)
- 文件内容:
-
二进制文件示例:
- 文件内容:一个简单的JPEG图像
- 存储形式:包含图像数据、元数据、压缩算法等信息。
- 数据表示:
FF D8 FF E0 00 10 4A 46 49 46 00 01 ...
(十六进制表示) - 数据解析:需要了解JPEG文件格式,才能正确解析图像数据。
总结
从本质上区分文本文件和二进制文件,关键在于它们的数据表示方式、文件结构和数据处理方式。文本文件以字符编码的形式存储,结构简单,易于处理;而二进制文件以二进制形式存储,结构复杂,需要特定的解析程序来处理。