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

首先声明:这些内容主要是面向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语言的字符处理函数读写文本文件中的汉字,当然还可以对这两个例子进行扩展,比如在文本文件中进行汉字的查找和替换等。

  • 18
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值