老的程序中把一些数据加了密,我现在要把那些数据转换回来,遇到了一个难题,
老程序是用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转移成单字节也没有用,哪位朋友有好的建议?
老程序是用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转移成单字节也没有用,哪位朋友有好的建议?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货