function GetAsc(hz:String):char;
var c:integer;
begin
c:=ord(hz[2])-128;
GetAsc:=chr(c);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetAsc('1'));
end;
var c:integer;
begin
c:=ord(hz[2])-128;
GetAsc:=chr(c);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetAsc('1'));
end;
解决方案 »
- 各位帮忙看insert into 的语法问题
- 请教怎么给pchar类型分配内存?
- Socket通讯的问题,附上源码
- 为什么我得客户端只能连接8个?
- DELPHI如何实现图形报表(曲线图、饼图、三维立方图等)
- 想成为一名项目负责人吗?给你提供一个决好的系统设计案例。
- 请问Delphi中数据类型与VC中数据类型的对应和比较!
- 急!二百分全送,(因现只可送100,问题解决再送一百分),,请问谁有关于TREEVIEW的例子,直接连数据库的例子,二百分全送
- 请教,怪???
- windows protection error.you need to restart your computer.system halted.
- tikkypeng(千两狂死郎)请进“怪!怪!怪!这样的sql语句为什么会出错???请高手关注:)”
- 关于Query查询后编辑之问题
//删除oldstr空格,把全角转换成半角
procedure transstr(oldstr:string; var newstr:string);
var
i:integer;
begin
newstr:='';
i:=1;
if length(oldstr)<>0 then
while i<=length(oldstr) do
begin
if ord(oldstr[i])=163 then
begin
newstr:=newstr+chr(ord(oldstr[i+1])-128);
i:=i+2;
end
else if ord(oldstr[i])=161 then
i:=i+2
else if oldstr[i]=' ' then
i:=i+1
else
begin
newstr:=newstr+oldstr[i];
i:=i+1;
end;
end;end;
汉字、全角数字和全角字母都是双字节码,第一个字节的值减去160表示该字在字库中的区
码,第二个字节的值减去160为位码,如‘啊’的16进制编码为B0 A1,换算成十进制数就是
176和161,分别减去160后就是16和1,即‘啊’字的区位码是1601,同样数字和字母的区位
码也是如此,如‘0’是0316,‘1’是0317等,因此判断汉字及全角字符基本上只要看其连
续的两个字节是否大于160,至于半角字符和数字则更简单了,只要到ASCII码表中查一查就
知道了。
表述如有错误,还请更正
//删除oldstr空格,把全角转换成半角
//根据汉字字符编码规则:连续两个字节都大于160,
//全角符号第一字节大部分为163
//~,全角空格第一字节都是161,不知道怎么区分?
procedure transstr(oldstr:string; var newstr:string);
var
i:integer;
begin
newstr:='';
i:=1;
if length(oldstr)<>0 then
while i<=length(oldstr) do
begin
if ord(oldstr[i])=163 then //转换全角符号
begin
newstr:=newstr+chr(ord(oldstr[i+1])-128);
i:=i+2;
end
else if ord(oldstr[i])=161 then //去掉全角空格
i:=i+2
else if oldstr[i]=' ' then //去掉半角空格
i:=i+1
else if ord(oldstr[i])>160 then //如果是汉字,不进行是否是163判断
begin
newstr:=newstr+oldstr[i]+oldstr[i+1];
i:=i+2;
end
else
begin
newstr:=newstr+oldstr[i]; //其他半角字符
i:=i+1;
end;
end;end;