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 codifica di un array dati o di una stringa ASCII in una stringa codificata in Base64. Definire in INPtr indirizzo array o tringa da codificare, in INLength la lunghezza dati da convertire. In OUTPtr l’indirizzo del buffer di memorizzazione valore convertito ed in OUTSize la sua dimensione (Deve essere almeno pari ai 4/3 della dimensione dati da convertire).
Se i dati da codificare sono molti per non rallentare l’esecuzione del programma è possibile frazionarla, definire in INLength il numero di caratteri da codificare (Sulle varie frazioni, ma non sull’ultima deve essere un multiplo di 3). Al termine della codifica di una frazione in un nuovo loop di programma è possibile eseguire la codifica successva definendo INPtr:=INPtr+INLength e OUTPtr:=OUTPtr+((INLength*4)/3).
Descrizione
INPtr (PVOID) Indirizzo array o stringa da codificare.
INLength (UDINT) Lunghezza dati da codificare.
OUTPtr (PVOID) Indirizzo buffer dati codificati.
OUTSize (UDINT) Dimensione buffer dati codificati.
La funzione ritorna una variabile UDINT con il numero di bytes codificati. 0 se errore esecuzione.

Esempi
Come utilizzare gli esempi
ST_Base64Encode: Viene eseguita la codifica in Base64 di valori esadecimali e stringa.
LogicLab (Ptp179, ST_Base64Encode)
PROGRAM ST_Base64Encode
VAR
Convert : BOOL; (* Conversion command *)
AString : STRING[ 16 ]; (* Ascii string *)
SCHDBase64 : STRING[ 32 ]; (* Single conversion hex data Base64 string *)
MCHDBase64 : STRING[ 32 ]; (* Multiple conversion hex data Base64 string *)
ADBase64 : STRING[ 32 ]; (* ASCII data Base64 string *)
Result : ARRAY[0..3] OF UDINT; (* Result status *)
HArray : ARRAY[0..16] OF BYTE := [16#03, 16#67, 16#e1, 16#00, 16#04, 16#67, 16#0e, 16#01, 16#05, 16#e7, 16#02, 16#06, 16#e8, 16#00,16#07, 16#bc, 16#00]; (* Hexadecimal array *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_Base64Encode"
// *****************************************************************************
// A Base64 encoding.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// HEX TO BASE64 ENCODING
// -------------------------------------------------------------------------
// Setting by debug the "Convert" flag the conversion is executed.
IF NOT(Convert) THEN RETURN; END_IF;
Convert:=FALSE; //Conversion command
// THe array to encode is 17 bytes length.
// The value is: 0367e10004670e0105e70206e80007bc00
// The encoded string length is 4/3 of the source.
Result[0]:=Base64Encode(ADR(HArray), SIZEOF(HArray), ADR(SCHDBase64), SIZEOF(SCHDBase64));
// The same conversion splitted on two executions.
Result[1]:=Base64Encode(ADR(HArray), 6, ADR(MCHDBase64), SIZEOF(MCHDBase64));
Result[2]:=Base64Encode(ADR(HArray)+6, 11, ADR(MCHDBase64)+8, SIZEOF(MCHDBase64)-8);
// -------------------------------------------------------------------------
// STRING TO BASE64 ENCODING
// -------------------------------------------------------------------------
// The string to encode is 12 chars length.
// The encoded value is: "SGVsbG8gd29ybGQh".
AString:='Hello world!';
// The encoded string length is 4/3 of the source.
Result[3]:=Base64Encode(ADR(AString), LEN(AString), ADR(ADBase64), SIZEOF(ADBase64));
// [End of file]