C语言 字符全角、半角转换

1.全角是一种电脑字符 ,且每个全角字符 占用两个标准字符(或半角 字符)位置。

每个普通字符(或半角字符)只占用一字节的空间(一字节有8位,共256个编码空间),而汉语、日语、及朝鲜文等象形字语言的字库量远大于256个,所以改用两个字节来储存。同时,也是因为中日韩等象形文字的书写习惯,如果统一使用全角字符的话,排列起来也显得整齐。

为了排列整齐,英文和其它拉丁文的字符和标点也提供了全角格式。

汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符。

通常的英文字母、数字键、符号键都是半角的,半角的显示内码都是一个字节。在系统内部,以上三种字符是作为基本代码处理的,所以用户输入命令和参数时一般都使用半角。   全角占两个字节,半角占一个字节。半角全角主要是针对标点符号来说的,全角标点占两个字节,半角占一个字节,而不管是半角还是全角,汉字都还是要占两个字节。

在编程序的源代码中只能使用半角标点(不包括字符串内部的数据)

在不支持汉字等语言的计算机上只能使用半角标点(其实这种情况根本就不存在半角全角的概念)

对于大多数字体来说,全角看起来比半角大,当然这不是本质区别

[全角举例]AabB1234@#$%^&*;,。:

[半角举例]AabB1234@#$%^&*;,.: 


2.实际中,半角英文字符、标点符号等,转换为全角的过程是:将在单字节高8位设置为 0xA3 (即163),将低字节设置为该单字节字符 + 0x80(即128)----将其变为一个首位为1的8位字节,将其变为俩个个字节(即全角)。


C语言实现 字符的全角、半角转换:

 

 

int fullToHalf(char *sFullStr, char *sHalfStr)

{

    int iFullStrIndex = 0;

    int iHalfStrIndex = 0;

    

    int iFullStrLen = strlen(sFullStr);

    

    printf("sFullStr[%s]\n", sFullStr);

    

    for(; iFullStrIndex < iFullStrLen; iFullStrIndex++, iHalfStrIndex++){

        

        if(sFullStr[iFullStrIndex] == 0xA3){

            sHalfStr[iHalfStrIndex] = sFullStr[++iFullStrIndex]- 0x80;

            

        }else{

            sHalfStr[iHalfStrIndex] = sFullStr[iFullStrIndex];

            

        }

        

    }

    

    printf("sHalfStr:[%s]\n", sHalfStr);

    

    return 0;

}


 

int halfToFull(char *sFullStr, char *sHalfStr)

{

    int iFullStrIndex = 0;

    int iHalfStrIndex = 0;

    

    int iHalfStrlen = strlen(sHalfStr);

    

    printf("sHalfStr[%s]\n", sHalfStr);

    

    for(; iHalfStrIndex < iHalfStrlen; iHalfStrIndex++, iFullStrIndex++){

        

        if(sHalfStr[iHalfStrIndex] < 0x80){

            sFullStr[iFullStrIndex] = 0xA3;

            sFullStr[++iFullStrIndex] = sHalfStr[iHalfStrIndex] + 0x80;

            

        }else{

            sFullStr[iFullStrIndex] = sHalfStr[iHalfStrIndex];

            

        }

        

    }

    

    printf("sFullStr:[%s]\n", sFullStr);

    

    return 0;

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值