C语言文件操作解析(一)
C语言文件操作解析(一)
在讨论C语言文件操作之前,先了解一下与文件相关的东西。
一.文本文件和二进制文件
文本文件的定义:由若干行字符构成的计算机文件,存在于计算机系统中。文本文件只能存储文件中的有效字符信息,不能存储图像、声音等信息。狭义上的二进制文件则指除开文本文件之外的文件,如图片、DOC文档。
事实上,无论是上面所定义的文本文件还是二进制文件,在计算机中存储都是以二进制的形式存储的,因此其本质并没有区别。所以广义上的二进制文件便指所有的文件。
通常意义下,我们所说的文本文件指只包含了纯文本信息的文件(通过手动编辑完成,包含的都是可显字符),二进制文件特指文件里面存储的是二进制代码的文件。至于为什么在计算机内存储的都是二进制数据,而给我们所呈现的确是文字、图像等信息,这跟计算机硬件组成有关系,因为计算机里面的元件是晶体管,其只有两种稳定的状态,因此二进制的0和1能表示其状态。很多个晶体管的不同状态的组合便呈现给我们不同的信息了。下面以汉字在计算机中的表示为例。
二.汉字在计算机中的表示
用计算机去处理汉字信息,必须对汉字进行编码,变成能被计算机识别的二进制。汉字编码主要有输入码、机内码、字形码三种。分别有不同的作用。
输入码:为了能直接使用西方英文标准键盘输入汉字,必须制定相应的编码规则,如拼音码(拼音输入法)、数字码(数字输入法)等
机内码:指汉字在计算机内部的表示形式,即二进制形式,通常采用两字节来表示一个汉字,每个字节的最高位设置为1(其值为负),如汉字“我”在计算机内的表示为11001110 11010010.
字形码:存储在计算机内的汉字需要在屏幕上显示或者打印机上输出时,需要知道汉字的字形信息,而汉字的机内码并不能表示汉字的字形信息,因此需要专门的字形码 。最通用的字形信息显示采用点阵的形式,即将汉字的字形分解成若干个“点”形成的点阵。每个点有黑白两种信息,有笔画的用黑表示,反之用白表示。汉字的点阵信息量是很大的,比如16*16的点阵需要用256位表示其信息,则需要32字节的空间。
计算机中存放了所有汉字的字形码组合起来的字形库也称字模库,当汉字输出或者显示的时候由专门的字形检索程序根据这个汉字的机内码在字模库中找出与之对应的字形码,然后根据字形码输出到显示设备上。
所以我们平常所看到的文本文件或者图片等在计算机上都是以二进制形式存储,只是在显示的时候以人所能够识别的方式呈现给我们。
测试程序
#include<stdio.h>
#include<string.h>
int main(void)
{
char s[]="我";
unsigned char *p=(unsigned char *)s;
printf("%d\n",strlen(s));
printf("%X\n",*p);
printf("%X\n",*(p+1));
return 0;
}
输出结果:
2
CE
D2
Press any key to continue