c++ builder:如何转换全角字符到半角字符?

原创 2001年06月16日 22:30:00

 

  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字
节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则
是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
我给出一个例程供大家参考。

  新建窗体,在窗体上放置Button1、Edit1、Edit2。

/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int nLength=Edit1->Text.Length();
        if (nLength==0)
                return;
        AnsiString str="";
        char *cTmp=new char[nLength+1];
        StrPCopy(cTmp,Edit1->Text);
        BYTE c1,c2;
        int i;
        for (i=0;i<nLength;i++)
        {
                c1=cTmp[i];
                c2=cTmp[i+1];
                if (c1==163)//判断是否为全角字符
                {

                        str=str+AnsiString((char)(c2-128));
                        i++;
                        continue;
                 }
                if (c1>163)//判断是否为文字
                {

                        str=str+AnsiString((char)c1);
                        str=str+AnsiString((char)c2);
                        i++;
                        continue;
                }
                if ((c1==161) && (c2==161))//全角空格是个特例,另加处理
                        {
                                str=str+" ";
                                i++;
                                continue;
                        }
                str=str+ AnsiString(char(c1));
        }
        Edit2->Text=str;
        delete cTmp;cTmp=NULL;
} 

  以上代码C++Builder5.0/Win98 SE下编译通过。                        

                        csdn_light(稻草人)

MySQL 全角转换为半角

​序言:       用户注册时候,录入了全角手机号码,所以导致短信系统根据手机字段发送短信失败,现在问题来了,如何把全角手机号码变成半角手机号码?1,手机号码全角转换成半角先查询出来全角半角都存在的...
  • mchdba
  • mchdba
  • 2014年11月01日 22:00
  • 4481

如何理解python3的unicode,以及全角半角转换

关于unicode最易懂的解释(没有之一),建议耐心看完: 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 http://www.freebuf.com/articles/other...
  • zinnc
  • zinnc
  • 2017年03月30日 21:56
  • 1898

JAVA实现全角半角相互转化 (full2Half & half2Full)

说明: 1.全角:指一个字符占用两个标准字符位置。汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用...
  • chndata
  • chndata
  • 2015年08月07日 09:45
  • 3078

C#实现全角字符转换成半角字符

  • 2014年07月18日 11:07
  • 847B
  • 下载

java全角字符和半角字符转换

  • 2010年04月16日 16:02
  • 846B
  • 下载

一次java全角字符与半角字符转换优化

全角与半角 通常的英文字母、数字键、符号键都是半角的,半角的显示内码都是一个字节。而每个全角字符占用两个标准字符(或半角字符)位置 半角字符是从33开始到126结束,与半角字符对应的全...
  • LGCSSX
  • LGCSSX
  • 2015年11月27日 20:30
  • 436

java 半角全角字符转换

原文链接->
  • xu_fu
  • xu_fu
  • 2014年05月26日 10:23
  • 1338

半角与全角字符的转换

  • 2012年09月13日 16:59
  • 1KB
  • 下载

字符串操作(人民币转成大写/全角字符转半角字符/去掉字符串中重复的子字符串/过滤常见特殊字符/反过滤特殊字符/判断是不是合法手机/字符串匹配的算法)

package 字符串类; import java.util.LinkedHashSet; import java.util.Set; import java.util.regex.Matcher;...
  • randomnet
  • randomnet
  • 2013年01月03日 11:08
  • 1196

php字符串处理之全角半角转换(正则匹配全角字符思路)

半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路。 一、概念 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)例如:/[\x...
  • h330531987
  • h330531987
  • 2017年04月14日 21:15
  • 746
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++ builder:如何转换全角字符到半角字符?
举报原因:
原因补充:

(最多只允许输入30个字)