This commit is contained in:
visionmercer 2022-10-07 09:17:31 +02:00
commit 60ec50a47d
2 changed files with 55 additions and 54 deletions

57
atob.bm
View file

@ -1,46 +1,23 @@
$if atob = undefined then $if atob = undefined then
$let atob = defined $let atob = defined
Function atob$ (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 Function atob$ (s As String)
c1 = Asc(Mid$(strng, i, 1)) Const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
t1 = _SHR((c1), 2) Dim c1 As _Byte
Buffer = Buffer + Mid$(B64, t1 + 1, 1) Dim c2 As _Byte
If Len(strng) >= i + 1 Then Dim c3 As _Byte
c2 = Asc(Mid$(strng, i + 1, 1)) Dim c4 As _Byte
t2 = (_SHL((c1 And &B00000011), 4)) Or (_SHR((c2), 4)) Dim i As Long
Buffer = Buffer + Mid$(B64, t2 + 1, 1) Dim As String Buffer
Else For i = 1 To Len(s) Step 4
t2 = (_SHL((c1 And &B00000011), 4)) c1 = InStr(B64, Mid$(s, i + 0, 1)) - 1
Buffer = Buffer + Mid$(B64, t2 + 1, 1) c2 = InStr(B64, Mid$(s, i + 1, 1)) - 1
Buffer = Buffer + "==" c3 = InStr(B64, Mid$(s, i + 2, 1)) - 1
atob$ = Buffer c4 = InStr(B64, Mid$(s, i + 3, 1)) - 1
Exit Function If c2 > -1 Then Buffer = Buffer + Chr$(((c1 * 4 + c2 \ 16) And 255))
End If If c3 > -1 Then Buffer = Buffer + Chr$(((c2 * 16 + c3 \ 4) And 255))
If Len(strng) >= i + 2 Then If c4 > -1 Then Buffer = Buffer + Chr$(((c3 * 64 + c4) And 255))
c3 = Asc(Mid$(strng, i + 2, 1)) Next i
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 + "="
atob$ = Buffer
Exit Function
End If
Next
atob$ = Buffer atob$ = Buffer
End Function End Function
$end if $end if

54
btoa.bm
View file

@ -1,22 +1,46 @@
$if btoa = undefined then $if btoa = undefined then
$let btoa = defined $let btoa = defined
Function btoa$ (s As String) Function btoa$ (strng As String)
Const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" Const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim c1 As _Byte Dim c1 As _Unsigned _Byte
Dim c2 As _Byte Dim c2 As _Unsigned _Byte
Dim c3 As _Byte Dim c3 As _Unsigned _Byte
Dim c4 As _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 i As Long
Dim As String Buffer Dim Buffer As String
For i = 1 To Len(s) Step 4
c1 = InStr(B64, Mid$(s, i + 0, 1)) - 1 For i = 1 To Len(strng) Step 3
c2 = InStr(B64, Mid$(s, i + 1, 1)) - 1 c1 = Asc(Mid$(strng, i, 1))
c3 = InStr(B64, Mid$(s, i + 2, 1)) - 1 t1 = _SHR((c1), 2)
c4 = InStr(B64, Mid$(s, i + 3, 1)) - 1 Buffer = Buffer + Mid$(B64, t1 + 1, 1)
If c2 > -1 Then Buffer = Buffer + Chr$(((c1 * 4 + c2 \ 16) And 255)) If Len(strng) >= i + 1 Then
If c3 > -1 Then Buffer = Buffer + Chr$(((c2 * 16 + c3 \ 4) And 255)) c2 = Asc(Mid$(strng, i + 1, 1))
If c4 > -1 Then Buffer = Buffer + Chr$(((c3 * 64 + c4) And 255)) t2 = (_SHL((c1 And &B00000011), 4)) Or (_SHR((c2), 4))
Next i 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 btoa$ = Buffer
End Function End Function
$end if $end if