qb64-include/btoa.bm

46 lines
1.5 KiB
Text
Raw Normal View History

2022-09-19 01:27:48 +02:00
$if btoa = undefined then
$let btoa = defined
2022-10-07 09:17:31 +02:00
Function btoa$ (strng As String)
2022-05-09 12:36:52 +02:00
Const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
2022-10-07 09:17:31 +02:00
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
2022-05-09 12:36:52 +02:00
Dim i As Long
2022-10-07 09:17:31 +02:00
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
2022-05-09 12:36:52 +02:00
btoa$ = Buffer
2022-09-19 01:27:48 +02:00
End Function
$end if