类型转换(ascII->bcd)(50分)

  • 主题发起人 主题发起人 hqpeng
  • 开始时间 开始时间
H

hqpeng

Unregistered / Unconfirmed
GUEST, unregistred user!
在编程中想将字符转换成十六进制吗,希望各位专家指教.
如 a:="AB"
想转换成b
b:=chr($AB)
 
给你做了个函数:

function cn(CurrStr:string):Integer
var i,sum:Integer;
CurrChr:char;
begin
sum:=0;
for i:=1 to Length(CurrStr) do begin
CurrChr:=CurrStr[length(CurrStr)-i+1];
case CurrChr of
'0'..'9':sum:=sum+TRUNC(StrToInt(CurrChr)*intpower(16,i-1));
'a'..'f':sum:=sum+TRUNC((ord(CurrChr)-87)*intpower(16,i-1));
'A'..'F':sum:=sum+TRUNC((ord(CurrChr)-55)*intpower(16,i-1));
else begin
ShowMessage('Convert Error!');
result:=-1;
Exit;
end;
end;
end;
Result:=sum;
end;
 
该算法在很早的“微型计算机原理”谭浩强编有关于此的算法及框图、源程序等,
大致为:AscII比BCD吗多30H.根据该原理,你自己可写出程序,且也可参考以上
诸位的思想.
 
function HexStrToInt(const HexStr: String): integer;
var
i: integer;
base: integer;
begin
result := 0;
base := 1;

for i := Length(HexStr) downto 1 do
begin
case HexStr of
'0'..'9': Inc(result, (Ord(HexStr) - Ord('0')) * base);
'a'..'f': Inc(result, (Ord(HexStr) - (Ord('a') - 10)) * base);
'A'..'F': Inc(result, (Ord(HexStr) - (Ord('A') - 10)) * base);
else
raise EConvertError.Create('格式不对');
end;
base := base * 16;
end;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部