---
title: "Conversioni tra tipi di dati"
description: "Conversioni negli script TapHome: formattare numeri e date con TOSTRING, leggere numeri con TODOUBLE, testo in byte con TOBYTES, Base64 e XML con ENCODE."
url: "https://taphome.com/it/docs/script/data-type-conversions/"
language: it
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["data-conversion","type-conversion","number-formatting","encoding","scripting-language"]
  questions: ["Come converto una stringa in un numero in uno script TapHome?","Come formatto un numero come stringa in TapHome?","Come formatto un numero con due decimali?","Come stampo un numero in esadecimale?","Come formatto una data come testo in uno script TapHome?","Come converto una stringa in un array di byte?","Come codifico un testo in Base64 in uno script TapHome?","Come eseguo l'escape dei caratteri speciali per XML?","Dove sono documentate TOBCD, FROMBCD, RGBTOHSV e HSVTORGB?"]
---

# 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: 2026-11-06

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](https://taphome.com/it/docs/script/bit-operations/) e la conversione dei colori (`HSVTORGB`, `RGBTOHSV`) in [Colori](https://taphome.com/it/docs/script/colours/).

## 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.

```text
TOSTRING(value)
TOSTRING(value, format)
TOSTRING(bytes, encoding)
```

| Ingresso | Risultato |
|---|---|
| string | Invariato. |
| number | Senza formato, il numero semplice con il punto decimale (`21.5`). Con un formato, vedi [Stringhe di formato](https://taphome.com/it/docs/script/data-type-conversions/#format-strings). |
| `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**

```taphome
# 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](https://taphome.com/it/docs/script/listener-scripts/#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 `X` maiuscola 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 e `hh` quello a 12 ore; `MM` è il mese e `mm` il minuto.

**Esempio — timestamp per un log o una richiesta HTTP**

```taphome
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.

```text
TODOUBLE(text)
```

**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**

```taphome
# 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.5
```

## TOBYTES

`TOBYTES` codifica un testo in una collezione di byte (`collection<uint8>`), usando `iso-8859-1` se non viene indicata un'altra codifica.

```text
TOBYTES(text)
TOBYTES(text, encoding)
```

**Note** — La documentazione precedente chiamava questa funzione `TOBYTEARRAY`; questo nome non esiste nel linguaggio. Usa `TOBYTES` per preparare i dati per [SENDDATA](https://taphome.com/it/docs/script/packet-parser/#senddata) o per [UNPACKVALUE](https://taphome.com/it/docs/script/binary-data/#unpackvalue).

**Esempio**

```taphome
# 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: 3
```

**Errori** — *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).

```text
ENCODE(text, coding)
```

**Note**

- `"xml"` sostituisce `&`, `'`, `"`, `>` e `<` con `&amp;`, `&apos;`, `&quot;`, `&gt;` e `&lt;`.
- 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](https://taphome.com/it/docs/script/byte-encodings/#tobase64).

**Esempio**

```taphome
ENCODE("a<b & c>d", "xml");
# Result: "a&lt;b &amp; c&gt;d"
ENCODE("user:pass", "base64");
# Result: "dXNlcjpwYXNz"
```

**Esempio — intestazione di autorizzazione HTTP Basic**

```taphome
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"`).

```text
DECODE(text, coding)
```

**Esempio**

```taphome
# Base64 in testo UTF-8
DECODE("dXNlcjpwYXNz", "base64");
# Result: "user:pass"
# entità XML di nuovo in carattere
DECODE("a &lt; 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](https://taphome.com/it/docs/script/byte-encodings/#tobase64).

**Errori** — *The provided text does not have the base64 format.*; *DECODE Unknown encoding. Valid values are 'xml', 'base64'*.

**Vedi anche** — [ENCODE](https://taphome.com/it/docs/script/data-type-conversions/#encode), [PARSEJSON](https://taphome.com/it/docs/script/parsing-functions/#parsejson).
