我们知道,在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(稻草人) 
|