qb64-include/btoa.bm
visionmercer 60ec50a47d Well
2022-10-07 09:17:31 +02:00

46 lines
No EOL
1.5 KiB
Text

$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