逆
逆水
Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个题目,要求将一串十六进制数每次取出两位相加。
我是这样处理的,为了防止将如:01、02之类的数前面的零在STRTOINT时被消掉,我每取出两位都给它们加上33,最终计算数值时再将加上去的33去掉。可我发现如这串数中有FA、FC、FD之类的数时,加数值会变成三位,这样我的公式只取到后面两位,结果就错误了。
那位兄弟请告诉我还有什么办法实现我的要求。
我的代码:
EDIT1。TEXT=s:='34567890FEF2F5F2'
for i:=1 to (length(S) div 2)do
s1:=s1+copy(IntToHex(StrToInt64((inttostr(strtoint(IntToStr(StrToInt64('$'+copy(s,2*i-1,2))))+51))),0),length(IntToHex(StrToInt64((inttostr(strtoint(IntToStr(StrToInt64('$'+copy(s,2*i-1,2))))+51))),0))-2*i+1,2) ;//每取出两位加33;
for i:=1 to (length(S) div 2)do
i1:=i1+ strtoint64('$'+copy(s1,2*i-1,2)) ;
s3:=inttostr(i1-((length(s) div 2)*51));//最终计算出的结果;
上面的方法很笨,见笑了。
我是这样处理的,为了防止将如:01、02之类的数前面的零在STRTOINT时被消掉,我每取出两位都给它们加上33,最终计算数值时再将加上去的33去掉。可我发现如这串数中有FA、FC、FD之类的数时,加数值会变成三位,这样我的公式只取到后面两位,结果就错误了。
那位兄弟请告诉我还有什么办法实现我的要求。
我的代码:
EDIT1。TEXT=s:='34567890FEF2F5F2'
for i:=1 to (length(S) div 2)do
s1:=s1+copy(IntToHex(StrToInt64((inttostr(strtoint(IntToStr(StrToInt64('$'+copy(s,2*i-1,2))))+51))),0),length(IntToHex(StrToInt64((inttostr(strtoint(IntToStr(StrToInt64('$'+copy(s,2*i-1,2))))+51))),0))-2*i+1,2) ;//每取出两位加33;
for i:=1 to (length(S) div 2)do
i1:=i1+ strtoint64('$'+copy(s1,2*i-1,2)) ;
s3:=inttostr(i1-((length(s) div 2)*51));//最终计算出的结果;
上面的方法很笨,见笑了。