您的位置:首页 > 编程语言 > C语言/C++

C语言字符型数据(二)— 汉字的读写

2016-03-31 17:17 281 查看
首先声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生。
在上一篇文章中,我们利用字符型变量处理了文本文件中的英文字符。但是,文本文件中不仅能输入英文字符,更多的时候我们需要处理汉字,如何用C语言程序读写这些汉字呢?大多数的C语言初学者或者已经学过C语言的学生对这个问题并不清楚,主要是因为教材上很少涉及这个问题。实际上汉字的读写是很实用的操作,它是基于汉语的文本搜索、自然语言处理等应用的基础。本文中将利用字符处理函数读写汉字,因此,也把这个问题当作是字符型数据的扩展应用。

文本文件中的英文字符是按照ASCII码存储的,每一个字符占一个字节,而汉字是按照汉字内码存储的,每一个汉字占两个字节(注意:汉字有不同编码:外码,国标码,内码,字形码等,请查阅相关资料)。汉字内码是在国标码的基础上加了8080H,换句话说,将国标码的两个字节的最高位置1,则变成了汉字内码。下面的例子可以显示文本文档中一个汉字的内码。

例1:在一个名为“a.txt”的文本文档中输入一个汉字“啊”,以十六进制的形式输出其内码。

#include"stdio.h"

int main()

{

char c;

freopen("a.txt","r",stdin);

//读出两个字节并输出

c = getchar();

printf("%X", c);

c = getchar();

printf("%X", c);

return 0;

}

图1显示了文本文件“a.txt”的内容,图2显示了汉字“啊”的内码。



图1.
文本文件a.txt的内容



图2.
汉字“啊”的内码

输出结果较长,是因为每个字节按照整型实际输出了4个字节,因为内码的最高位为1,因此最高三个字节的输出都是FF,我们只取第四个字节。因此“啊“的内码是B0A1。当然如果想输出更多汉字的内码,只需在文本文件中输入更多汉字,程序中加入循环处理即可。

反过来,如果知道了一个汉字的内码,能不能往文本文件中写入该汉字?答案是肯定的。下面的例子就是实现这一任务的。

例2:向文本文件“m.txt”中写入汉字“秦”,已知“秦”的内码是C7D8。

#include "stdio.h"

int main()

{

freopen("m.txt","a",stdout); //模式"a"不删除文件中已存在的内容,在后面添加。

//连续向文件中写入内码的高字节和低字节。

putchar(0xC7);

putchar(0xD8);

return 0;

}

运行程序后查看文件“m.txt”,如图3所示,“秦”字已经添加在其中。



图3.
程序运行后m.txt中的内容

上面的两个例子演示了如何用C语言的字符处理函数读写文本文件中的汉字,当然还可以对这两个例子进行扩展,比如在文本文件中进行汉字的查找和替换等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: