没学过VB,不过看了下MSDN
&H 等同delphi 的 $
&Habc1 相当于 $abc1Split函数就是用来分割字符串的,分割到一个数组中返回Cipher = Split("0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6", "@")
就是把这个字符串按照'@'这字符作为分割,挨个存到一个数组中返回,这里用数组cipher来接收
得到的结果就是
cipher[0] = 0BEA;
cipher[1] = 64d4;
cipher[x] = ....;然后循环这个数组cipher,为每个数组元素前拼接一个 &H 符号,拼接后结果是
cipher[0] = &H0BEA; // delphi中就是 $0bea
cipher[1] = &H64d4;
cipher[x] = ....;
至于这个GetNumber,里面做了递归调用,VB的 Chr函数跟delphi的chr一样,都是将数字转为ASCII码
xor异或操作符跟delphi一样没啥好说的了
&H 等同delphi 的 $
&Habc1 相当于 $abc1Split函数就是用来分割字符串的,分割到一个数组中返回Cipher = Split("0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6", "@")
就是把这个字符串按照'@'这字符作为分割,挨个存到一个数组中返回,这里用数组cipher来接收
得到的结果就是
cipher[0] = 0BEA;
cipher[1] = 64d4;
cipher[x] = ....;然后循环这个数组cipher,为每个数组元素前拼接一个 &H 符号,拼接后结果是
cipher[0] = &H0BEA; // delphi中就是 $0bea
cipher[1] = &H64d4;
cipher[x] = ....;
至于这个GetNumber,里面做了递归调用,VB的 Chr函数跟delphi的chr一样,都是将数字转为ASCII码
xor异或操作符跟delphi一样没啥好说的了
大侠,我遇到了问题。function tform1.split(s:string;dot:char):userarray;
var
str:userarray;
i,j:integer;
begin
i:=1;
j:=0;
SetLength(str, 255);
while Pos(dot, s) > 0 do
begin
str[j]:=copy(s,i,pos(dot,s)-i);
i:=pos(dot,s)+1;
s[i-1] := chr(ord(dot)+1);
j:=j+1;
end;
str[j]:=copy(s,i,strlen(pchar(s))-i+1);
result:=str;
end;
Function Encode(num:Integer):String; //这里应该不对,vb是long (有符号的32位整型,delphi是什么呢?)
begin
If Num < 256 Then
result := Chr(Num Xor $B2)
Else
result := Chr(Num Xor $B209)
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
ReStr:userarray;
i:Integer;
Pl:String;
begin
reStr:= Split(edit1.Text,'@');
for i:=0 to length(ReStr) - 1 do
begin
pl:=pl+Encode( $ReStr[i] ); //无法通过编译
end;
end;end.
// 这个递归函数有点看不懂,if 和 else里都做了递归,这不是没有递归出口的死循环了么
function GetNumber(num: Integer): AnsiString;
begin
if num < 256 then
Result := GetNumber(Byte(num xor $B2));
else
Result := GetNumber(Byte(num xor $B209))
end;// 调用处可以这样写
procedure TForm1.btn1Click(Sender: TObject);
var
cipher: TStringList;
plain: AnsiString;
i: Integer;
desStr: AnsiString;
begin
desStr :=
'0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6';
cipher := TStringList.Create;
ExtractStrings(['@'], [], PAnsiChar(desStr), cipher);
try
for i := 0 to cipher.Count - 1 do
begin
plain := plain + GetNumber(StrToInt('$' + cipher[i]));
end;
finally
cipher.Free;
end;
end;
If Num < 256 Then // 如果真 就递归
GetNumber = Chr(Num Xor &HB2)
Else // 否则假 也递归,这不是要栈溢出了
GetNumber = Chr(Num Xor &HB209)
End If
End Function主要是这段VB递归代码没明白,等懂VB的人来跟你讲了,俺就不误导你了
function GetNumber(num: Integer): AnsiString;
begin
if num < 256 then
Result := Chr(Num Xor $B2) //GetNumber(Byte(num xor $B2))
else
Result := Chr(Num Xor $B209) //GetNumber(Byte(num xor $B209))
end;
大神你想多了,不是递归,func名称相当于 result 代码倒是通过了,但是返回了乱码。。
处理后得到
'爿校轼襄?0?爱?03'你想得到的是什么结果