老的程序中把一些数据加了密,我现在要把那些数据转换回来,遇到了一个难题,
老程序是用FOXPRO的,代码如下:
* 字段内容加密
FUNCTION jami
   PARAMETER aa
   PRIVATE bb, cc, n, j, k, m
   
   bb=""
   cc=CHR(145)
   DO CASE
      CASE TYPE("aa")="C"
         aa="c"+LTRIM(aa)
      CASE TYPE("aa")="N"
         aa=INT(aa)
         aa=STR(aa)
         aa="n"+LTRIM(aa)
      CASE TYPE("aa")="D"
         aa="d"+LTRIM(DTOC(aa))
      CASE TYPE("aa")="L"
         DO CASE
            CASE (aa=.T.) .OR. (aa=.T.)
               aa="t"+".T."
            CASE (aa=.F.) .OR. (aa=.F.)
               aa="f"+".F."
         ENDCASE
   ENDCASE
   aa=TRIM(aa)
   N=LEN(aa)
   j=1
   DO WHILE j<=N
      m=SPACE(1)
      m=SUBS(aa,j,1)
      K=0
      K=ASC(m)
      IF K<128
         K=K+128
      ELSE
         K=255-K
      ENDIF
      bb=bb+CHR(K)+cc
      j=j+1
   ENDDO
   RETURN bb
* 字段解密
FUNCTION gaim
   PARAMETER aa
   PRIVATE bb, cc, n, j, k, m, l, rt, rl   bb=""
   aa=TRIM(aa)
   N=LEN(aa)
   j=1
   l=0
   DO WHILE j<=N
      m=SUBS(aa,j,1)
      K=ASC(m)
      IF K>=128
         K=K-128
      ELSE
         K=255-K
      ENDIF
      bb=bb+CHR(K)
      l=l+1
      j=2*l+1
   ENDDO
   N=LEN(bb)
   rt=SUBS(bb,1,1)
   rl=SUBS(bb,2,N-1)
   DO CASE
      CASE rt="c"
         bb=rl
      CASE rt="n"
         bb=INT(VAL(rl))
      CASE rt="d"
         bb=CTOD(rl)
      CASE rt="t".or.rt="f"
         bb=&rl
   ENDCASE
   RETURN bb我只需解密,改成VB后代码如下:
Function gaim(ByVal aa As String) As String   Dim bb As String
   Dim n As Integer
   Dim j As Integer
   Dim k As Integer
   Dim m As String
   Dim l As Integer
   Dim rt As String
   Dim rl As String
      bb = ""
   aa = StrConv(Trim(aa), vbFromUnicode)
   n = Len(aa)
   j = 1
   l = 0
   Do While j <= n
      m = Mid(aa, j, 1)
      k = Asc(m)
      If k >= 128 Then
         k = k - 128
      Else
         k = 255 - k
      End If
      bb = bb + Chr(k)
      l = l + 1
      j = 2 * l + 1
   Loop
   n = Len(bb)
   rt = Mid(bb, 1, 1)
   rl = Mid(bb, 2, n - 1)
   Select Case rt
      Case "c"
         bb = rl
      Case "n"
         bb = Int(Val(rl))
      Case "d"
         bb = CDate(rl)
      Case "t", "f"
         bb = rl
   End Select
   gaim = bb
End Function现在遇到的问题就是,在字符串处理中,系统将原来的数据中的一些乱码字符识别成了中文,这样取文字的话就变成了取中文(二字节),导致转换后的数据都不能直接使用,我用STRCONV转移成单字节也没有用,哪位朋友有好的建议?