关于二进制文件的读写
一).一般问题
二进制文件与我们通常使用的文本文件储存方式有根本的不同。这样的不同很难用言语
表达,自己亲自看一看,理解起来会容易得多。因此,我推荐学习二进制文件读写的朋友安
装一款十六进制编辑器。这样的编辑器有很多,在我们的 CVF 附带的集成开发环境下就可
以(将二进制文件拖动到 IDE 窗口后松开)。 Visual Studio 2005 也是可以的。(不过需要
在 File 菜单下 Open,File)
另外推荐一款使用较多的软件,叫做 UltraEdit(以下简称 UE)。是很不错的文本编辑
器,也能做十六进制编辑器使用。
为什么要用十六进制编辑器?而不用 2 进制呢?因为 2 进制实在太小,书写起来会很
长,很不直观。而我们的计算机把 8 位作为一个字节。刚好 2 ** 8 = 256 = 16 ** 2。
用 8 位 2 进制表达的数,我们用 2 个十六进制数据来表达,更直观和方便。
二).文件格式
所有文件,笼统意义上将可以区分为两类,一类是文本文件,一类是二进制文件。
1).文本文件
文本文件用记事本等文本编辑器打开,我们可以看懂上面的信息。所以使用比较广泛。
通常一个文本文件分为很多很多行,作为数据储存时,还有列的概念。实际上,储存在硬盘
或其他介质上,文件内容是线一样储存的,列是用空格或 Tab 间隔,行是用回车和换行符
间隔。
以 ANSI 编码(使用较多)的文本文件来说,例如我们储存如下信息:
引用:
10
11
12
需要的空间是:3 行 × 每行 2 个字符 + 2 个回车符 + 2 个换行符 = 10 字节。文本文件
储存数据是有格式,无数据类型的。比如 10 这个数据,并不指定是整型还是实型还是字符
串。它有长度,就是 2,两个字节。储存时计算机储存它的 ASCII 码:31h,30h。(十六进
制表示)。 回车符是:0Dh,换行符:0Ah。
因此,这个数据储存是这样的:
引用:
31 30 0D 0A 31 31 0D 0A 31 32
(红色为回车符和换行符) 31h 30h 就是 10,31h 31h 就是 11,31h 32h 就是 12。因此
我们也可以认为文本文件是特殊的二进制文件。
2).二进制文件
二进制文件,是无格式有数据类型的。比如上面的 10 11 12 三个数。但二进制文件没
有行的概念。我们要紧凑地储存他们。( 当然也可以中间加入一些空白的字节)
从数据类型上来说,我们首先考虑整型。如果把 10 11 12 当作 2 字长的整型。则 10 表
示为:0Ah 00h。因为 0Ah 对应十进制 10。而后面的 00h 是空白位。2 字长的整型如果不
足 FFh,也就是不足 255,则需要一个空白位。类似的:11 表示为 0Bh 00h,12 表示
为 0Ch 00h。