-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbtoa.bm
46 lines (45 loc) · 1.53 KB
/
btoa.bm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$if btoa = undefined then
$let btoa = defined
Function btoa$ (strng As String)
Const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim c1 As _Unsigned _Byte
Dim c2 As _Unsigned _Byte
Dim c3 As _Unsigned _Byte
Dim t1 As _Unsigned _Byte
Dim t2 As _Unsigned _Byte
Dim t3 As _Unsigned _Byte
Dim t4 As _Unsigned _Byte
Dim i As Long
Dim Buffer As String
For i = 1 To Len(strng) Step 3
c1 = Asc(Mid$(strng, i, 1))
t1 = _SHR((c1), 2)
Buffer = Buffer + Mid$(B64, t1 + 1, 1)
If Len(strng) >= i + 1 Then
c2 = Asc(Mid$(strng, i + 1, 1))
t2 = (_SHL((c1 And &B00000011), 4)) Or (_SHR((c2), 4))
Buffer = Buffer + Mid$(B64, t2 + 1, 1)
Else
t2 = (_SHL((c1 And &B00000011), 4))
Buffer = Buffer + Mid$(B64, t2 + 1, 1)
Buffer = Buffer + "=="
btoa$ = Buffer
Exit Function
End If
If Len(strng) >= i + 2 Then
c3 = Asc(Mid$(strng, i + 2, 1))
t3 = (_SHL((c2 And &B00001111), 2)) Or (_SHR((c3), 6))
Buffer = Buffer + Mid$(B64, t3 + 1, 1)
t4 = c3 And &B00111111
Buffer = Buffer + Mid$(B64, t4 + 1, 1)
Else
t3 = (_SHL((c2 And &B00001111), 2))
Buffer = Buffer + Mid$(B64, t3 + 1, 1)
Buffer = Buffer + "="
btoa$ = Buffer
Exit Function
End If
Next
btoa$ = Buffer
End Function
$end if