没学过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一样没啥好说的了

解决方案 »

  1.   

    "&H" & Cipher(i) 就是将数组 cilpher[i] 这个字符串类型元素转为16进制整形,vb中long类型为32位有符号整形
      

  2.   

    哇。谢谢大牛,能这么教我,我也是初学,对进位制这些不太了解,记不清楚,大侠,如何才能学扎实呢?是不是从asm学起?
      

  3.   

    delphi俺也才入门不久,从哪学起都一样,也没必要从asm学起,基础学牢就行了,基础牢了才能掌握自学的能力。
      

  4.   


    大侠,我遇到了问题。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.
      

  5.   

     pl:=pl+Encode($+StrToInt(strToHexStr(ReStr[i])) );这句改了,可以运行,但是是乱码、、、
      

  6.   


    // 这个递归函数有点看不懂,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;
      

  7.   

    Private Function GetNumber(ByVal Num As Long) As String
        If Num < 256 Then // 如果真 就递归
           GetNumber = Chr(Num Xor &HB2)
        Else // 否则假 也递归,这不是要栈溢出了
           GetNumber = Chr(Num Xor &HB209)
        End If
    End Function主要是这段VB递归代码没明白,等懂VB的人来跟你讲了,俺就不误导你了
      

  8.   


    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 代码倒是通过了,但是返回了乱码。。
      

  9.   

    这串字符串'0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6'
    处理后得到
    '爿校轼襄?0?爱?03'你想得到的是什么结果