Seite 1 von 1

Base64Decoder

Verfasst: 31.08.2021 15:37
von Andi
Ich habe mal eine Frage zum Decoder-Beispiel aus der Hilfe. Dort steht mehr oder weniger:

Code: Alles auswählen

*DecodedBuffer = AllocateMemory(1024)
Base64Decoder(encoded$, *DecodedBuffer, 1024)
decoded$ = PeekS(*DecodedBuffer, -1, #PB_UTF8) 
Warum 1024? Gibt es einen Zusammenhang mit der Länge von encoded$, also des zu dekodierenden Inhalts?
Wenn ja, dann würde ich doch Folgendes als Beispiel-Code erwarten:

Code: Alles auswählen

*DecodedBuffer = AllocateMemory(len(encoded$))
Base64Decoder(encoded$, *DecodedBuffer, len(encoded$))
decoded$ = PeekS(*DecodedBuffer, -1, #PB_UTF8) 
Oder sehe ich das falsch?

Re: Base64Decoder

Verfasst: 31.08.2021 16:12
von STARGÅTE
Die 1024 ist an dieser Stelle willkürlich.
Wichtig ist nur, der dekodierte Puffer muss mindestens 64 Byte sein und darf bis zu 33% kleiner sein als der codierte Puffer.
Das bezieht sich doch auf die Byte-Länge. Beachte dass Strings in PureBasic im UTF-16 Format gespeichert sind, also jeder Buchstabe immer 2 Bytes einnimmt.

Wenn, dann wäre es wohl so am sichersten:

Code: Alles auswählen

*DecodedBuffer = AllocateMemory(StringByteLength(encoded$)*0.67 + 64)
Base64Decoder(encoded$, *DecodedBuffer, MemorySize(*DecodedBuffer))

Re: Base64Decoder

Verfasst: 31.08.2021 16:22
von Andi
@STARGATE: Danke für Deine Antwort!
Wenn die Zahl 1024 willkürlich ist, dann kann ich also auch den Inhalt einer Textdatei mit - sagen wir mal - 4 KB Dateigröße unter Verwendung der Zahl 1024 dekodieren?

Re: Base64Decoder

Verfasst: 31.08.2021 16:25
von NicTheQuick
Nein, die 1024 funktioniert nur in dem Beispiel aus der Hilfe, weil der Text dort besonders kurz ist und niemals mehr als 1024 Bytes im dekodierten Zustand haben wird. Eine dekodierte 4KB Textdatei passt natürlich nicht in 1024 Bytes.

Re: Base64Decoder

Verfasst: 31.08.2021 16:58
von Andi
Okay. Danke!