Matthew的Blog
IT博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
公告
QQ: 15693996
MSN:protoss0@msn.com
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(8)
给我留言
查看公开留言
查看私人留言
随笔分类
(26)
Access相关(2)
(rss)
C#编程(3)
(rss)
Delphi编程(13)
(rss)
SQL Server编程(7)
(rss)
编程辅助
(rss)
软件下载(1)
(rss)
随笔档案
(27)
2008年4月 (1)
2007年7月 (1)
2006年7月 (4)
2006年6月 (6)
2006年4月 (15)
相册
My Photos
友情链接
Cynthia个人主页
Dave's blog
Dragon的Blog
最新随笔
1. kerry's blog
2. 程序中动态创建GUID
3. 资料收集工具下载
4. Access中的交叉表
5. Access的一些SQL语法
6. 控制Excel
7. 用SQL语句更改数据库名,表名,列名
8. 我的Delphi多语言处理组件
9. 给窗口上所有的控件设置Caption或Text
10. Delphi中ClientDataSet的使用
积分与排名
积分 - 44892
排名 - 134
阅读排行榜
1. C#中openFileDialog的使用(11806)
2. cxGrid的一些使用方法(5535)
3. Delphi中ClientDataSet的使用(4391)
4. Delphi中结束进程(3892)
5. 用SQL语句更改数据库名,表名,列名(3337)
评论排行榜
1. Delphi中结束进程(10)
2. 资料收集工具下载(3)
3. Delphi中实现全角转半角(2)
4. C#中openFileDialog的使用(1)
5. 我的Delphi多语言处理组件(1)
Delphi中实现全角转半角
function SbctoDbc(s:string):string;
var
nlength,i:integer;
str,ctmp,c1,c2:string;
{
在windows中,中文和全角字符都占两个字节,
并且使用了ascii chart
2
(codes
128
-
255
)。
全角字符的第一个字节总是被置为163,
而第二个字节则是相同半角字符码加上128(不包括空格)。
如半角a为65,则全角a则是163(第一个字节)、
193
(第二个字节,
128
+
65
)。
而对于中文来讲,它的第一个字节被置为大于163,(
如
'
阿
'
为:
176
162
),我们可以在检测到中文时不进行转换。
}
begin
nlength:
=
length(s);
if
(nlength
=
0
) then
exit;
str:
=
''
;
setlength(ctmp,nlength
+
1
);
ctmp:
=
s;
i:
=
1
;
while
(i
<=
nlength)
do
begin
c1:
=
ctmp[i];
c2:
=
ctmp[i
+
1
];
if
(c1
=
#
163
) then
//
如果是全角字符
begin
str:
=
str
+
chr(ord(c2[
1
])
-
128
);
inc(i,
2
);
continue
;
end;
if
(c1
>
#
163
) then
//
如果是汉字
begin
str:
=
str
+
c1;
str:
=
str
+
c2;
inc(i,
2
);
continue
;
end;
if
(c1
=
#
161
) and (c2
=
#
161
) then
//
如果是全角空格
begin
str:
=
str
+
'
'
;
inc(i,
2
);
continue
;
end;
str:
=
str
+
c1;
inc(i);
end;
result:
=
str;
end;
posted on 2006-04-29 12:45
matthew
阅读(1903)
评论(2)
编辑
收藏
引用
所属分类:
Delphi编程
评论
#
re: Delphi中实现全角转半角
2006-08-29 18:13
LDT
你这个为什么中文的句号转换不正确呀!
回复
更多评论
#
re: Delphi中实现全角转半角
2007-01-07 15:18
豆腐干环境看来
标点符号没转
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © matthew