全角和半角相互转换(C语言实现)

目前,我们接触的汉字编码主要包括GBK和GB2312。其中,GB2312又称国标码,它是一个简化字的编码规范,也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。而GBK是GB2312的扩展,是向上兼容的,GB2312中的汉字的编码与GBK中汉字的相同,只不过GBK中还包含繁体字的编码。GBK中每个汉字仍然占用两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。因此,下面的代码也是在使用GB2312或GBK编码的环境下测试通过。

 1 //全角转半角
 2 void sbc_to_dbc(char *sbc, char *dbc)
 3 {
 4     for(; *sbc; ++sbc)
 5     {
 6         if((*sbc & 0xff) == 0xA1 && (*(sbc + 1) & 0xff) == 0xA1)        //全角空格
 7         {
 8             *dbc++ = 0x20;
 9             ++sbc;
10         }
11         else if((*sbc & 0xff) == 0xA3 && (*(sbc + 1) & 0xff) >= 0xA1 && (*(sbc + 1) & 0xff) <= 0xFE)    //ASCII码中其它可显示字符
12             *dbc++ = *++sbc - 0x80;
13         else
14         {
15             if(*sbc < 0)    //如果是中文字符,则拷贝两个字节
16                 *dbc++ = *sbc++;
17             *dbc++ = *sbc;
18         }
19     }
20     *dbc = 0;
21 }
22 
23 //半角转全角
24 void dbc_to_sbc(char *dbc, char *sbc)
25 {
26     for(; *dbc; ++dbc)
27     {
28         if((*dbc & 0xff) == 0x20)    //半角空格
29         {
30             *sbc++ = 0xA1;
31             *sbc++ = 0xA1;
32         }
33         else if((*dbc & 0xff) >= 0x21 && (*dbc & 0xff) <= 0x7E)
34         {
35             *sbc++ = 0xA3;
36             *sbc++ = *dbc + 0x80;
37         }
38         else
39         {
40             if(*dbc < 0)    //如果是中文字符,则拷贝两个字节
41                 *sbc++ = *dbc++;
42             *sbc++ = *dbc;
43         }
44     }
45     *sbc = 0;
46 }

 

转载于:https://www.cnblogs.com/leemang/p/3215499.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值