如何转换全角字符到半角字符
我们知道,在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下编译通过。