我們知道,在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下編譯通過。