The following code works with small texts, but > 100 characters something goes wrong. Base64Decode then only returns -1
I'm too stupid - I'm missing something - but what?
Code: Select all
UseZipPacker()
Procedure.s UnCompressStringBase64 (txt.s)
Protected *out, size, unpacksize, *mem, Result.s, base64size
size = StringByteLength(txt)
If size
size * 1.5
*out = AllocateMemory(size)
EndIf
If *out
base64size = Base64Decoder(txt, *out, MemorySize(*out))
If base64size > 0
*mem = AllocateMemory(base64size * 2)
If *mem
unpacksize = UncompressMemory(*out, base64size, *mem, MemorySize(*mem), #PB_PackerPlugin_Zip)
EndIf
EndIf
FreeMemory(*out)
If unpacksize > 0
Result = PeekS(*mem, unpacksize, #PB_Ascii)
EndIf
FreeMemory(*mem)
EndIf
Debug "Uncompressed: " + Result
ProcedureReturn Result
EndProcedure
Procedure.s CompressStringBase64 (txt.s)
Protected Result.s
size = StringByteLength(txt)
*mem = Ascii(txt)
If *mem
*out = AllocateMemory(MemorySize(*mem) * 1.5)
EndIf
If *out
compressedSize = CompressMemory(*mem, MemorySize(*mem), *out, MemorySize(*out), #PB_PackerPlugin_Zip)
EndIf
FreeMemory(*mem)
If compressedSize > 0
Result = Base64Encoder(*out, compressedSize, #PB_Cipher_URL)
EndIf
Debug "Compressed: " + Result
ProcedureReturn Result
EndProcedure
; Please try with Space(10) and Space(100)
; does it work allways for you?
Debug UnCompressStringBase64(CompressStringBase64( "[ A () C()" + Space(20) + "D$%& G ]"))


