I wanted to write my own...
Code:
FUNCTION Base64Encode(InputStream AS STRING) AS STRING LOCAL Base64Alphabet AS STRING Base64Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" LOCAL OutputStream AS STRING LOCAL ByteDecVal AS INTEGER LOCAL BitBinVal AS INTEGER LOCAL ByteGroup AS STRING LOCAL ByteGroupBinStream AS STRING LOCAL Padding AS STRING LOCAL idx AS INTEGER DO WHILE InputStream <> "" ByteGroup = LEFT$(InputStream, 3) DO WHILE ByteGroup <> "" FOR idx = 7 TO 0 STEP -1 ByteDecVal = ASC(LEFT$(ByteGroup, 1)) BitBinVal = BIT(ByteDecVal, idx) ByteGroupBinStream = ByteGroupBinStream & TRIM$(STR$(BitBinVal)) NEXT idx ByteGroup = REMAIN$(ByteGroup, LEFT$(ByteGroup, 1)) LOOP IF LEN(ByteGroupBinStream) < 24 THEN Padding = STRING$((((LEN(ByteGroupBinStream) / 8) -3) * -1), "=") ByteGroupBinStream = ByteGroupBinStream & STRING$(INT(24 / LEN(ByteGroupBinStream)) + 1, "0") END IF DO WHILE ByteGroupBinStream <> "" OutputStream = OutputStream & MID$(Base64Alphabet, VAL("&B00" & LEFT$(ByteGroupBinStream, 6)) + 1, 1) ByteGroupBinStream = REMAIN$(ByteGroupBinStream, LEFT$(ByteGroupBinStream, 6)) LOOP OutputStream = OutputStream & Padding ByteGroupBinStream = "" InputStream = REMAIN$(InputStream, LEFT$(InputStream, 3)) LOOP FUNCTION = OutputStream END FUNCTION FUNCTION Base64Decode(InputStream AS STRING) AS STRING LOCAL Base64Alphabet AS STRING Base64Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" LOCAL OutputStream AS STRING LOCAL ByteDecVal AS INTEGER LOCAL BitBinVal AS INTEGER LOCAL ByteGroup AS STRING LOCAL ByteGroupBinStream AS STRING LOCAL Padding AS STRING LOCAL idx AS INTEGER Base64Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" InputStream = REMOVE$(InputStream, ANY REMOVE$(InputStream, ANY Base64Alphabet)) DO WHILE InputStream <> "" ByteGroup = LEFT$(InputStream, 4) DO WHILE ByteGroup <> "" FOR idx = 5 TO 0 STEP -1 ByteDecVal = INSTR(Base64Alphabet, LEFT$(ByteGroup, 1)) - 1 BitBinVal = BIT(ByteDecVal, idx) ByteGroupBinStream = ByteGroupBinStream & TRIM$(STR$(BitBinVal)) NEXT idx ByteGroup = REMAIN$(ByteGroup, LEFT$(ByteGroup, 1)) LOOP DO WHILE ByteGroupBinStream <> "" OutputStream = OutputStream & CHR$(VAL("&B" & LEFT$(ByteGroupBinStream, 8))) ByteGroupBinStream = REMAIN$(ByteGroupBinStream, LEFT$(ByteGroupBinStream, 8)) LOOP InputStream = REMAIN$(InputStream, LEFT$(InputStream, 4)) LOOP FUNCTION = OutputStream END FUNCTION FUNCTION PBMAIN() STDOUT Base64Encode("ABC") STDOUT Base64Decode("QUJD") END FUNCTION
------------------
Leave a comment: