Conversioni tra tipi di dati
Funzioni di conversione degli script TapHome — TOSTRING con stringhe di formato per numeri e date, TODOUBLE, TOBYTES ed ENCODE / DECODE per l'escape XML e Base64.
Ultimo aggiornamento:
Le funzioni di conversione trasformano i valori in testo e viceversa: numeri e date in testo formattato, testo in numeri e byte, e testo in Base64 o in forma sicura per XML. La conversione BCD (TOBCD, FROMBCD) si trova in Operazioni sui bit e la conversione dei colori (HSVTORGB, RGBTOHSV) in Colori.
TOSTRING
TOSTRING converte qualsiasi valore in testo — numeri e date con una stringa di formato .NET facoltativa, collezioni di byte e blob con una codifica del testo.
| |
| Ingresso | Risultato |
|---|---|
| string | Invariato. |
| number | Senza formato, il numero semplice con il punto decimale (21.5). Con un formato, vedi Stringhe di formato. |
datetime | Senza formato yyyy/MM/dd hh:mm:ss.fff (orologio a 12 ore, senza AM o PM); con un formato il modello indicato. |
collection<uint8>, blob | I byte decodificati come testo. Il secondo argomento è il nome della codifica, iso-8859-1 per impostazione predefinita, ad esempio "utf-8". |
| altra collezione | Errore Cannot cast collection of ‘X’ to string. |
Esempio
# testo esadecimale, maiuscole
TOSTRING(192, "X");
# Result: "C0"
TOSTRING(192, "X4");
# Result: "00C0"
# numero fisso di decimali
TOSTRING(123.34, "F4");
# Result: "123.3400"
TOSTRING(123.34, "F0");
# Result: "123"
# byte decodificati come testo
TOSTRING(BYTECOLLECTION("48656c6c6f"));
# Result: "Hello"
TOSTRING(BYTECOLLECTION("48656c6c6f"), "iso-8859-1");
# Result: "Hello"In uno script listener, TOSTRING(RECEIVEDMSG.PAYLOAD, "utf-8") legge il messaggio ricevuto come testo — vedi RECEIVEDMSG.
Stringhe di formato
TOSTRING formatta numeri e date con stringhe di formato .NET e usa sempre il punto decimale, qualunque siano le impostazioni di lingua dell’unità di controllo.
| Formato | Ingresso | Uscita |
|---|---|---|
"F2" | 231.4721 | "231.47" — numero fisso di decimali |
"F0" | 21.5 | "22" — arrotondato a un numero intero |
"0.0" | 7 | "7.0" — modello personalizzato |
"00" | 7 | "07" — zeri iniziali |
"X", "X4" | 255 | "FF", "00FF" — esadecimale, maiuscolo |
"yyyy-MM-dd" | datetime | "2026-01-15" |
"HH:mm" | datetime | "08:30" — orologio a 24 ore |
"dd.MM.yyyy HH:mm:ss" | datetime | "15.01.2026 08:30:00" |
Note
- Un formato che contiene una
Xmaiuscola converte prima il valore in un numero intero a 32 bit, poi lo stampa in esadecimale. - Nei formati di data
HHè l’orologio a 24 ore ehhquello a 12 ore;MMè il mese emmil minuto.
Esempio — timestamp per un log o una richiesta HTTP
VAR now := NOW();
"Updated " + TOSTRING(now, "dd.MM.yyyy HH:mm");TODOUBLE
TODOUBLE legge un numero da un testo che usa il punto decimale e restituisce NaN quando il testo non è un numero.
| |
Valore restituito — double. NaN quando il testo non può essere letto; 0 per Null.
Note — Il testo viene sempre letto con il punto decimale. Una virgola conta come separatore delle migliaia, quindi "1,5" dà 15. Sostituisci prima la virgola quando la sorgente usa la virgola decimale.
Esempio
# testo con punto decimale in numero
TODOUBLE("232");
# Result: 232
TODOUBLE("-192.332");
# Result: -192.332
# un non numero dà NaN
TODOUBLE("some text");
# Result: NaN
# prima la virgola decimale diventa punto
TODOUBLE(REPLACE("21,5", ",", "."));
# Result: 21.5TOBYTES
TOBYTES codifica un testo in una collezione di byte (collection<uint8>), usando iso-8859-1 se non viene indicata un’altra codifica.
| |
Note — La documentazione precedente chiamava questa funzione TOBYTEARRAY; questo nome non esiste nel linguaggio. Usa TOBYTES per preparare i dati per SENDDATA o per UNPACKVALUE.
Esempio
# testo in byte, predefinito iso-8859-1
VAR bytes := TOBYTES("Hello");
LENGTH(bytes);
# Result: 5
# codifica indicata esplicitamente
VAR euro := TOBYTES("€", "utf-8");
LENGTH(euro);
# Result: 3Errori — TOBYTES - argument 1 must be a string (il testo è Null); TOBYTES - unknown encoding.
ENCODE
ENCODE esegue l’escape di un testo per XML ("xml") o lo codifica in Base64 ("base64", dai byte UTF-8 del testo).
| |
Note
"xml"sostituisce&,',",>e<con&,',",>e<.- Un testo vuoto restituisce una stringa vuota. Il nome della codifica non distingue tra maiuscole e minuscole.
"base64"richiede Core 2022.2 o più recente."base64"codifica i byte UTF-8 del testo. Per dati binari, come byte cifrati, usa TOBASE64.
Esempio
ENCODE("a<b & c>d", "xml");
# Result: "a<b & c>d"
ENCODE("user:pass", "base64");
# Result: "dXNlcjpwYXNz"Esempio — intestazione di autorizzazione HTTP Basic
VAR auth := "Authorization: Basic " + ENCODE("user:pass", "base64");
VAR response := SENDHTTPREQUEST("/status", "GET", "", auth);Errori — ENCODE Unknown encoding. Valid values are ‘xml’, ‘base64’.
DECODE
DECODE è l’inverso di ENCODE: riconverte le entità XML in caratteri ("xml") o decodifica Base64 in testo UTF-8 ("base64").
| |
Esempio
# Base64 in testo UTF-8
DECODE("dXNlcjpwYXNz", "base64");
# Result: "user:pass"
# entità XML di nuovo in carattere
DECODE("a < b", "xml");
# Result: "a < b"
# decodifica di un valore Base64 da JSON
DECODE(PARSEJSON(json, "payload"), "base64");Note — "base64" restituisce testo UTF-8, quindi i byte sopra 0x7F non restano intatti. Decodifica i dati binari, come byte cifrati, con FROMBASE64.
Errori — The provided text does not have the base64 format.; DECODE Unknown encoding. Valid values are ‘xml’, ‘base64’.