怎样用对一个文件进行base64编码?谢了,最好有源码!

shm0718a 2003-08-18 06:05:26
我在网上看到都是对字付串进行base64编码,有人知道怎样对一个文件进行编码?多谢了!
...全文
43 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shm0718a 2003-08-21
  • 打赏
  • 举报
回复
to Cooly(给我一个开心的理由!):
谢谢大哥,谢谢你的代码,只是为什么我将一个程序或一张图片编码后发出去,然后用outlook 接收,看到的还是经过编码后的字符,要怎样才能将他还原啊?谢谢
Cooly 2003-08-19
  • 打赏
  • 举报
回复
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 #1

resultstring=Base64_EncodeBin(b)
pandengzhe 2003-08-19
  • 打赏
  • 举报
回复
vb网站一般都有这种邮件收发编码的例子,找找吧。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧