重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.使用API函数LCMapString实现。
成都创新互联服务紧随时代发展步伐,进行技术革新和技术进步,经过10年的发展和积累,已经汇集了一批资深网站策划师、设计师、专业的网站实施团队以及高素质售后服务人员,并且完全形成了一套成熟的业务流程,能够完全依照客户要求对网站进行成都网站制作、做网站、建设、维护、更新和改版,实现客户网站对外宣传展示的首要目的,并为客户企业品牌互联网化提供全面的解决方案。
char * pshort = new char[512] ;
char * plong = new char[512] ;
memset( pshort , 0 , 512 ) ;
memset( plong , 0 , 512 ) ;
plong = "helloworld";
DWORD lcid = LANG_SYSTEM_DEFAULT ;
LCMapString( lcid ,LCMAP_HALFWIDTH , plong , 20 ,pshort , 10 ) ;
pshort则为半角字符,如果将参数换位LCMAP_FULLWIDTH,可将全角字符转换为半角字符。
2.使用计算
对于ascii码在0x20到0x7d之间的,也就是键盘上正常的字符(除了~之外)都有一个规律,比如空格的半角为0x20,而全角是0xa0a3,低位是固定的都是0xa3,即全角字符的低位上固定为0xa3,并且高位上固定大0x80;可以使用以下计算:
//全角转化为半角,输入字符中可以有半角,但是字符中的所有全角均认为是ASCII码所对应的全角字符
void FullToHalf(CString strFull,CString strHalf)
{
strHalf="";
const char *pszFull=strFull.GetBuffer(strFull.GetLength());
int npszFull=strlen(pszFull);
char* pszHalf=new char[npszFull+1];
memset(pszHalf,0,npszFull+1);
int iHalf=0,iFull=0;
for(int iFull=0;iFullnpszFull;)
{
if((BYTE)(pszFull[iFull])128)//半角
{
memcpy(pszHalf+iHalf,pszFull+iFull,1);
iHalf++;
iFull++;
}
else//全角
{
BYTE bTemp=BYTE(pszFull[iFull+1]);
char cTemp=bTemp-128;
memcpy(pszHalf+iHalf,cTemp,1);
iHalf++;
iFull++;
iFull++;
}
}
strHalf.Format("%s",pszHalf);
delete[] pszHalf;
}
//半角转化为全角,输入字符中可以有全角
void HalfToFull(CString strHalf,CString strFull)
{
strFull="";
const char *pszHalf=strHalf.GetBuffer(strHalf.GetLength());
int npszHalf=strlen(pszHalf);
char* pszFull=new char[npszHalf+npszHalf+1];
memset(pszFull,0,npszHalf+npszHalf+1);
int iHalf=0,iFull=0;
for(int iHalf=0;iHalfnpszHalf;)
{
if((BYTE)(pszHalf[iHalf])128)//半角
{
BYTE bByte[2];
bByte[0]=160+3;
bByte[1]=128+(BYTE)pszHalf[iHalf];
memcpy(pszFull+iFull,bByte,2);
iHalf++;
iFull++;
iFull++;
}
else//全角
{
memcpy(pszFull+iFull,pszHalf+iHalf,2);
iHalf++;
iHalf++;
iFull++;
iFull++;
}
}
strFull.Format("%s",pszFull);
delete[] pszFull;
}
//函数功能:将字符串中的半角字符转换成全角字符
//入口参数:in_str——准备进行转换的半角字符串 类型string
//返回值: 转换成功的全角字符串 类型string
string c_return=""
long l0,l1,l2,l3,l4,i,c_leng,l_asc
i=1
c_leng=len(in_str)
do while i=c_leng
l_asc=asc(in_str)
if l_asc=128 then
if l_asc=33 and l_asc=126 then
l1=int((l_asc+41856)/(16*16*16))
l0=mod((l_asc+41856),(16*16*16))
l2=int(l0/(16*16))
l0=mod(l0,(16*16))
l3=int(l0/16)
l4=mod(l0,16)
c_return=c_return+char(l1*16+l2)+char(l3*16+l4)
else
c_return=c_return+left(in_str,1)
end if
in_str=replace(in_str,1,1,"")
i=i+1
else
c_return=c_return+left(in_str,2)
in_str=replace(in_str,1,2,"")
i=i+2
end if
loop
return c_return
全角转半角方法如下:
NSString *string;
NSMutableString *convertedString = [string mutableCopy];
CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformFullwidthHalfwidth, false);
NSLong(@"ddc:%@",convertString);
[convertedString release];
半角转全角只需要把kCFStringTransformFullwidthHalfwidth换成kCFStringTransformHiraganaKatakana即可。
全角和半角指不同格式的英文字母。 半角格式的英文字母相等于英语状态下输入的英文原始信息。全角格式英文字母和半角英文相比,在编码上不同,外观通常也不同。全角字母采用中文方式的编码,外观上更类似汉字。 可以把输入法删除在从新安装 或按shift+空格切换
在复件中,通过查找[a-zA-Z^32,.](勾选使用通配符),替换掉半角字符,只保留全角字符。如果还有其他半角标点,例如?、*、(、)、[、]等的代码分别加上引义符,改为\?、\*、\(、\)、\[、\],放在方括号内一并替换。将剩余的全角字符替换为每段一个字符。查找:?,替换为^p,不必勾使用通配符。全选,在表格菜单点排序,按拼音,将重复的删除。查找:(^13[!^13]@^13)\1,替换为:\1 注:勾使用通配符。剩余的字符,逐一查出Unicode 码我不知道有没有快速方法,最笨的方法是逐一选中,在菜单点插入-符号,复制字符代码栏内的十六进制码,再用计算器(在查看菜单中勾“程序员”)将复制的代码转为十进制码,查完不要点插入按钮,关闭对话框。将复制的代码填在原字符后面。例如:ω,字符代码为03C9,Unicode 码为969,则记为ω=969。根据下面提供的宏以及上面查出的代码,填入Unicode 码和目标字符。