我在网上看到都是对字付串进行base64编码,有人知道怎样对一个文件进行编码?多谢了!

解决方案 »

  1.   

    Private Function Base64_EncodeBin(byteSource) As String
        Dim BASE64_TABLE(1 To 64) As Byte    '用Byte数组保存编码表,可以省掉计算Asc值这一步
        Dim j As Double
        Dim m As Double
        Dim n As Double
        Dim num As Double
        Dim intPos As Double
        Dim BASE64_STR As String
        Dim a() As Byte
        
        BASE64_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
        
        For j = 1 To 64
            BASE64_TABLE(j) = Asc(Mid(BASE64_STR, j, 1))
        Next
        
        n = (UBound(byteSource) - UBound(byteSource) Mod 3)
        num = (n \ 3) * 4
        
        m = 0
        intPos = 0
        
        ReDim a(1 To num) As Byte
        
        For j = 1 To n Step 3
            
            m = m + 1
            a(m) = BASE64_TABLE((byteSource(j) \ 4) + 1)
            
            m = m + 1
            a(m) = BASE64_TABLE(((byteSource(j) Mod 4) * 16 + byteSource(j + 1) \ 16) + 1)
            
            m = m + 1
            a(m) = BASE64_TABLE(((byteSource(j + 1) Mod 16) * 4 + byteSource(j + 2) \ 64) + 1)
            
            m = m + 1
            a(m) = BASE64_TABLE((byteSource(j + 2) Mod 64) + 1)
            
            intPos = intPos + 4        If (intPos Mod 76) = 0 Then
               num = num + 2
               ReDim Preserve a(1 To num) As Byte
               m = m + 1
               a(m) = Asc(vbCr)
               m = m + 1
               a(m) = Asc(vbLf)
            End If
            
            DoEvents
            
        Next j
        
        If Not (UBound(byteSource) Mod 3) = 0 Then
             If (UBound(byteSource) Mod 3) = 2 Then
                num = num + 4
                ReDim Preserve a(1 To num) As Byte
                m = m + 1
                a(m) = BASE64_TABLE((byteSource(j) \ 4) + 1)
                If m Mod 76 = 0 Then
                    num = num + 2
                    ReDim Preserve a(1 To num) As Byte
                    m = m + 1
                    a(m) = Asc(vbCr)
                    m = m + 1
                    a(m) = Asc(vbLf)
                End If
                m = m + 1
                a(m) = BASE64_TABLE((byteSource(j) Mod 4) * 16 + byteSource(j + 1) \ 16 + 1)
                If m Mod 76 = 0 Then
                    num = num + 2
                    ReDim Preserve a(1 To num) As Byte
                    m = m + 1
                    a(m) = Asc(vbCr)
                    m = m + 1
                    a(m) = Asc(vbLf)
                End If
                m = m + 1
                a(m) = BASE64_TABLE((byteSource(j + 1) Mod 16) * 4 + 1)
                If m Mod 76 = 0 Then
                    num = num + 2
                    ReDim Preserve a(1 To num) As Byte
                    m = m + 1
                    a(m) = Asc(vbCr)
                    m = m + 1
                    a(m) = Asc(vbLf)
                End If
                m = m + 1
                a(m) = Asc("=")
             ElseIf (UBound(byteSource) Mod 3) = 1 Then
                num = num + 3
                ReDim Preserve a(1 To num) As Byte
                m = m + 1
                a(m) = BASE64_TABLE(byteSource(j) \ 4 + 1)
                If m Mod 76 = 0 Then
                    num = num + 2
                    ReDim Preserve a(1 To num) As Byte
                    m = m + 1
                    a(m) = Asc(vbCr)
                    m = m + 1
                    a(m) = Asc(vbLf)
                End If
                m = m + 1
                a(m) = BASE64_TABLE((byteSource(j) Mod 4) * 16 + 1)
                If m Mod 76 = 0 Then
                    num = num + 2
                    ReDim Preserve a(1 To num) As Byte
                    m = m + 1
                    a(m) = Asc(vbCr)
                    m = m + 1
                    a(m) = Asc(vbLf)
                End If
                m = m + 1
                a(m) = Asc("==")
             End If
        End If
        ReDim Preserve a(1 To m) As Byte '去掉有可能多出的空格
        
        Base64_EncodeBin = StrConv(a, vbUnicode)
        
    End Function''======应用dim b() as byte
    dim resultstring as string
    open "c:\command.com" for binary access read as #1
         redim b(lof(1)) as byte
         get #1,,b()
    close #1resultstring=Base64_EncodeBin(b)
      

  2.   

    to Cooly(给我一个开心的理由!):
    谢谢大哥,谢谢你的代码,只是为什么我将一个程序或一张图片编码后发出去,然后用outlook 接收,看到的还是经过编码后的字符,要怎样才能将他还原啊?谢谢