Base64 è un sistema di codifica che rappresenta dati binari in una stringa di testo utilizzando 64 caratteri. Questo rende i dati più facili da trasmettere e archiviare, in quanto i caratteri Base64 sono compatibili con la maggior parte dei sistemi informatici. Il padding con il carattere = viene utilizzato alla fine della stringa Base64 per garantire che la lunghezza sia un multiplo di 4.
Questa funzione esegue la decodifica di una stringa in Base64, definire in INPtr indirizzo della stringa da decodificare, in INLength la sua lunghezza (Se si definisce 0 viene eseguita la decodifica dell’intera stringa). In OUTPtr indirizzo del buffer di memorizzazione valore decodificato ed in OUTSize la sua dimensione (Deve essere almeno pari ai 3/4 della lunghezza della stringa da decodificare).
Se la stringa da decodificare è molto lunga per non rallentare l’esecuzione del programma è possibile frazionarla, definire in INLength il numero di caratteri da decodificare (Deve essere un multiplo di 4). Al termine della decodifica di una frazione in un nuovo loop di programma è possibile eseguire la decodifica successva definendo INPtr:=INPtr+INLength e OUTPtr:=OUTPtr+((INLength*3)/4).
Descrizione
INPtr (PVOID) Indirizzo buffer stringa in Base64 da decodificare.
INLength (UDINT) Lunghezza stringa da decodificare. Se 0 viene convertita l’intera stringa.
OUTPtr (PVOID) Indirizzo buffer dati decodificati.
OUTSize (UDINT) Dimensione buffer dati decodificati.
La funzione ritorna una variabile UDINT con il numero di bytes decodificati. 0 se errore esecuzione.

Esempi
Come utilizzare gli esempi
ST_Base64Decode: Viene eseguita la decodifica di stringhe Base64 in valori esadecimali e in stringa.
LogicLab (Ptp179, ST_Base64Decode)
PROGRAM ST_Base64Decode
VAR
Convert : BOOL; (* Conversion command *)
Base64 : STRING[ 32 ]; (* Base64 string *)
AString : STRING[ 12 ]; (* Ascii string *)
Result : ARRAY[0..3] OF UDINT; (* Result status *)
SCHArray : ARRAY[0..17] OF BYTE; (* Single conversion hexadecimal array *)
MCHArray : ARRAY[0..17] OF BYTE; (* Multiple conversion hexadecimal array *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_Base64Decode"
// *****************************************************************************
// A Base64 decoding.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// BASE64 TO HEX DECODING
// -------------------------------------------------------------------------
// Setting by debug the "Convert" flag the conversion is executed.
IF NOT(Convert) THEN RETURN; END_IF;
Convert:=FALSE; //Conversion command
// Base64 definition of the hex value: 0367e10004670e0105e70206e80007bc00
// it's 24 chars length.
Base64:='A2fhAARnDgEF5wIG6AAHvAA=';
// The encoded string must be a multiple of 4 long, the decoded array
// length is 3/4 of the source.
Result[0]:=Base64Decode(ADR(Base64), LEN(Base64), ADR(SCHArray), SIZEOF(SCHArray));
// The same conversion splitted on two executions.
Result[1]:=Base64Decode(ADR(Base64), 12, ADR(MCHArray), SIZEOF(MCHArray));
Result[2]:=Base64Decode(ADR(Base64)+12, 12, ADR(MCHArray)+9, SIZEOF(MCHArray)-9);
// -------------------------------------------------------------------------
// BASE64 TO STRING DECODING
// -------------------------------------------------------------------------
// Base64 definition of the ascii string: Hello world! it's 16 chars length.
Base64:='SGVsbG8gd29ybGQh';
// The encoded string must be a multiple of 4 long, the decoded string is
// 3/4 length of the source.
Result[3]:=Base64Decode(ADR(Base64), LEN(Base64), ADR(AString), SIZEOF(AString));
// [End of file]