一个基础问题,那位朋友帮我看看。(50分)

阿虫

Unregistered / Unconfirmed
GUEST, unregistred user!
各位前辈,为什么这一小段程序不能执行呢。可我看不出那有问题呀!
var
i,k:integer;
s:string;
begin
for i:=1 to length(edit1.text) div 2do
s:=s+inttohex(strtoint64(inttostr(strtoint(copy(edit1.text,length(edit1.text)-2*i+1,2))+51)),0);
for i:=1 to length(s) div 2do
k:=k+strtoint(copy(s,2*i-1,2));
edit2.text:=inttostr(k);
end;
上面程序中,S是一串十六进制的数,我每取出两位相加,可总无法执行,为什么呢。
 
写先简单一点,分解测试
 
试过了,没用的,上面这段程序的意思是,先EDIT1中的字符串用COPY取,每次取两位,每两位
加51后转化为十六进制的数生成一串十六进制的字符串。
然后我在用COPY 取这串字符串,每次还取两位,将每次取出的两位数先化为整数型再依次相加。
即如下:
EDIT中:1234567890;取出(12+51)转为十六进制数+(34+51)转为十六进制数+。。。
假如生成的十六进制字符串是:‘3456AD2A4D’则要:34+56+AD+2A+4D=?请问那位朋友有
好点的方法,多谢多谢了。
 
非常难看的code...
 
大哥,你的代码:
s:=s+inttohex(..);
k:=k+strtoint(..);
inttohex的反函数是strtoint那么简单吗?
Just use: k:=k+strtoint('$'+copy(s,2*i-1,2));
还有,你的中间结果s:String;有什么用?直接相加不就可以了吗??
var
i,k,len:integer;
begin
len:=length(edit1.text);
k:=0;
for i:=1 to len div 2do
k:=k+strtoint(copy(edit1.text,len-2*i+1,2))+51;
Caption:=inttostr(k);
end;
 
你说的有道理的,不过我已经发现我错在那里了,
FOR I:=0 TO LENGTH(S) DIV 2 -1 //才对的,我写错了。
谢谢各位了。
 
多人接受答案了。
 
顶部