新建From1(窗体),新建Command1(按钮CommandButton),代码:
Private Sub Command1_Click()
Debug.Print modToolsBase64.Encode("码农库")
Debug.Print modToolsBase64.Decode("wuvFqb/i")
End Sub
modToolsBase64.bas,代码:
Option Explicit
' Base64编码表
Private Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
' Base64编码函数
Public Function Encode(ByVal Data As String) As String
Dim i As Long
Dim j As Long
Dim ByteArray() As Byte
Dim Result As String
Dim Temp As Long
Dim GroupCount As Long
' 将字符串转换为字节数组
ByteArray = StrConv(Data, vbFromUnicode)
' 计算需要多少个4字节组
GroupCount = (UBound(ByteArray) + 1) \ 3
If (UBound(ByteArray) + 1) Mod 3 <> 0 Then GroupCount = GroupCount + 1
' 初始化结果字符串
Result = String(GroupCount * 4, "=")
' 处理每个3字节组
For i = 0 To GroupCount - 1
' 获取3个字节(不足的补0)
Temp = 0
For j = 0 To 2
If i * 3 + j <= UBound(ByteArray) Then
Temp = Temp Or (ByteArray(i * 3 + j) * (256 ^ (2 - j)))
End If
Next j
' 转换为4个Base64字符
For j = 0 To 3
If i * 4 + j < Len(Result) Then
Mid$(Result, i * 4 + j + 1, 1) = Mid$(BASE64_TABLE, ((Temp \ (64 ^ (3 - j))) And 63) + 1, 1)
End If
Next j
Next i
Encode = Result
End Function
' Base64解码函数
Public Function Decode(ByVal Data As String) As String
Dim i As Long
Dim j As Long
Dim ByteArray() As Byte
Dim Result As String
Dim Temp As Long
Dim GroupCount As Long
Dim CharValue As Long
' 去除无效字符
Data = Replace(Data, vbCr, "")
Data = Replace(Data, vbLf, "")
Data = Replace(Data, vbTab, "")
Data = Replace(Data, " ", "")
' 计算需要多少个3字节组
GroupCount = Len(Data) \ 4
' 初始化字节数组
ReDim ByteArray(GroupCount * 3 - 1)
' 处理每个4字符组
For i = 0 To GroupCount - 1
Temp = 0
' 获取4个Base64字符的值
For j = 0 To 3
CharValue = InStr(1, BASE64_TABLE, Mid$(Data, i * 4 + j + 1, 1)) - 1
If CharValue < 0 Then CharValue = 0 ' 处理填充字符'='
Temp = Temp Or (CharValue * (64 ^ (3 - j)))
Next j
' 转换为3个字节
For j = 0 To 2
If i * 3 + j <= UBound(ByteArray) Then
ByteArray(i * 3 + j) = (Temp \ (256 ^ (2 - j))) And 255
End If
Next j
Next i
' 将字节数组转换为字符串
Result = StrConv(ByteArray, vbUnicode)
' 去除可能的空字符
If InStr(Result, vbNullChar) > 0 Then
Result = Left$(Result, InStr(Result, vbNullChar) - 1)
End If
Decode = Result
End Function
运行结果:
wuvFqb/i
码农库