快速业务通道

如何转换全角字符到半角字符

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

我们知道,在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下编译通过。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号