以下是引用zaqqazxx在2019-8-28 19:57:23的发言:
如果在vfp6下完美解决,有酬谢,有意加微15504045919
本人手上有个项目,也可合作开发,有意的高手可详谈
试试看能否换点金子
#DEFINE CRYPT_STRING_BASE64 0x00000001
#DEFINE CRYPT_STRING_NOCRLF 0x40000000
DECLARE LONG CryptBinaryToStringA IN crypt32 STRING@, LONG, LONG, STRING@, LONG@
DECLARE LONG CryptStringToBinaryA IN crypt32 STRING@, LONG, LONG, STRING@, LONG@, LONG@, LONG@
cStr = "中国"
? _Base64Encode(cStr)
? _Base64Decode(_Base64Encode(cStr))
RETURN
FUNCTION _Base64Encode(cStr)
LOCAL nBase64DataLen, cBase64Data
nBase64DataLen = 0
IF CryptBinaryToStringA(cStr, LEN(cStr), CRYPT_STRING_BASE64+CRYPT_STRING_NOCRLF, NULL, @nBase64DataLen)==0
MESSAGEBOX("获取编码后的数据长度失败")
RETURN ""
ENDIF
cBase64Data = SPACE(nBase64DataLen+1)
IF CryptBinaryToStringA(cStr, LEN(cStr), CRYPT_STRING_BASE64+CRYPT_STRING_NOCRLF, @cBase64Data, @nBase64DataLen)==0
MESSAGEBOX("Base64编码失败")
RETURN ""
ENDIF
RETURN LEFT(cBase64Data,AT(CHR(0),cBase64Data)-1)
ENDFUNC
FUNCTION _Base64Decode(cBase64Str)
LOCAL nOutLen,cStr
nOutLen = 0
IF CryptStringToBinaryA(cBase64Str,LEN(cBase64Str),CRYPT_STRING_BASE64,0,@nOutLen,0,0)==0
MESSAGEBOX("获取解码数据长度失败")
RETURN ""
ENDIF
cStr = SPACE(nOutLen)
IF CryptStringToBinaryA(cBase64Str,LEN(cBase64Str),CRYPT_STRING_BASE64,@cStr,@nOutLen,0,0)==0
MESSAGEBOX("Base64解码失败")
RETURN ""
ENDIF
RETURN cStr
ENDFUNC