---
title: "Codifiche di byte e checksum"
description: "Codifiche di byte nello script TapHome: Base64 e base64url di dati binari, testo esadecimale, CRC16 nella variante Modbus, XMODEM, CCITT-FALSE o KERMIT, e CRC32."
url: "https://taphome.com/it/docs/script/byte-encodings/"
language: it
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["byte-encodings","packet-parser","modbus","scripting-language"]
  questions: ["Come decodifico dati binari Base64 in uno script TapHome?","Come converto byte in testo esadecimale in uno script TapHome?","Come calcolo un CRC16 Modbus RTU in uno script?","Quale versione di Core richiedono le funzioni di codifica dei byte?"]
---

# Codifiche di byte e checksum

Funzioni dello script TapHome TOBASE64 e FROMBASE64 (anche base64url), TOHEX e FROMHEX, CRC16 e CRC32 — byte come testo e ritorno, e checksum dei frame.

Ultimo aggiornamento: 2026-11-06

`TOBASE64`, `FROMBASE64`, `TOHEX`, `FROMHEX`, `CRC16` e `CRC32` convertono byte in testo e viceversa e calcolano checksum, di solito insieme alle [funzioni di crittografia e hash](https://taphome.com/it/docs/script/encryption-and-hashes/). Costruiscono solo valori, quindi funzionano in ogni script. Tutte richiedono TapHome Next 2026.1.40991+.

`TOBASE64`, `TOHEX`, `CRC16` e `CRC32` accettano dati in byte come le funzioni di crittografia: una `collection<uint8>`, un blob o una stringa, usata come byte ISO-8859-1 (per UTF-8 passa `TOBYTES(text, "utf-8")`). `TOBASE64` e `TOHEX` restituiscono una stringa, `CRC16` e `CRC32` un numero `uint`; `FROMBASE64` e `FROMHEX` accettano testo e restituiscono una `collection<uint8>`.

## TOBASE64, FROMBASE64

`TOBASE64` converte dati in byte in testo Base64, `FROMBASE64` converte il testo Base64 di nuovo in byte.

```text
TOBASE64(data [, variant])
FROMBASE64(text [, variant])
```

`variant` è `"standard"` (predefinito) o `"url"`, senza distinzione tra maiuscole e minuscole. `"url"` è base64url (RFC 4648 §5), che usa `-` e `_` al posto di `+` e `/`. `TOBASE64` con `"url"` omette il padding `=`, come si aspettano JWT e la maggior parte delle API web (Python `base64.urlsafe_b64encode(data).rstrip(b"=")`); `FROMBASE64` con `"url"` accetta testo con o senza padding.

**Valore restituito** — `TOBASE64` una stringa, `FROMBASE64` una `collection<uint8>`.

**Note** — [ENCODE e DECODE](https://taphome.com/it/docs/script/data-type-conversions/#encode) con `"base64"` passano per testo UTF-8, quindi i byte sopra `0x7F` non restano intatti. I dati cifrati e gli altri dati binari passano per `TOBASE64` e `FROMBASE64`.

**Esempio**

```taphome
# Base64 standard di due byte
TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
# base64url: senza padding, - e _ al posto di + e /
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
# decodifica di base64url in testo esadecimale
TOHEX(FROMBASE64("-_8", "url"));
# Result: "fbff"
```

**Errori** — *TOBASE64 Unknown variant. Valid values are 'standard', 'url'* (`FROMBASE64` indica il proprio nome); *FROMBASE64 - '+' and '/' are not base64url characters, leave the "url" argument out for standard Base64*; *FROMBASE64 - argument must be a string*; *The provided text does not have the base64 format.*

**Disponibile** — TapHome Next 2026.1.40991+.

## TOHEX, FROMHEX

`TOHEX` restituisce dati in byte come testo esadecimale minuscolo, `FROMHEX` converte il testo esadecimale di nuovo in byte.

```text
TOHEX(data)
FROMHEX(text)
```

**Note**

- `FROMHEX` accetta cifre maiuscole e minuscole e spazi tra di esse, come `bytes.fromhex` in Python. Qualsiasi altro carattere, compreso un prefisso `0x` o separatori `:`, è un errore, così come un numero dispari di cifre. Una stringa vuota dà una collezione vuota.
- A differenza di [BYTECOLLECTION](https://taphome.com/it/docs/script/text-string-and-byte-array/#bytecollection) da testo esadecimale, che ignora in silenzio gli altri caratteri ed è limitata a 2048 byte, `FROMHEX` non ha limiti di lunghezza, quindi riconverte tutto ciò che `TOHEX` ha prodotto.

**Esempio**

```taphome
# tre byte come Base64
TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
# Base64 di nuovo in byte, poi testo esadecimale
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
# maiuscole e spazi sono accettati
TOHEX(FROMHEX("FF 00 80"));
# Result: "ff0080"
```

**Errori** — *FROMHEX - invalid hex digit 'x'* (rimuovi un prefisso o i separatori con `REPLACE`); *FROMHEX - the number of hex digits must be even, it is N*; *FROMHEX - argument must be a string*.

**Disponibile** — TapHome Next 2026.1.40991+.

## CRC16, CRC32

`CRC16` restituisce il checksum CRC a 16 bit di dati in byte, `CRC32` il CRC-32 di zlib, Ethernet e ZIP (Python `zlib.crc32`).

```text
CRC16(data [, variant])
CRC32(data)
```

`variant` sceglie i parametri di `CRC16`, senza distinzione tra maiuscole e minuscole. Il valore di controllo è il CRC del testo `"123456789"`:

| `variant` | Valore di controllo | Noto anche come |
|---|---|---|
| `"MODBUS"` (predefinito) | `0x4B37` | frame Modbus RTU |
| `"XMODEM"` | `0x31C3` | Python `binascii.crc_hqx(data, 0)` |
| `"CCITT-FALSE"` | `0x29B1` | `"IBM-3740"` è accettato come la stessa variante |
| `"KERMIT"` | `0x2189` | |

Il valore di controllo di `CRC32` è `0xCBF43926` (3421780262).

**Valore restituito** — un numero `uint`, non byte. Per inserire il checksum in un frame, impacchettalo con [PACKVALUE](https://taphome.com/it/docs/script/binary-data/#packvalue) nell'ordine dei byte che il protocollo si aspetta; Modbus RTU invia per primo il byte basso.

**Esempio**

```taphome
TOSTRING(CRC16(FROMHEX("0103000A0001")), "X4");
# Result: "08A4"
TOSTRING(CRC32("123456789"), "X8");
# Result: "CBF43926"
```

**Esempio — aggiungere un checksum Modbus RTU**

```taphome
# byte del frame da testo esadecimale
VAR frame := FROMHEX("01 03 00 0A 00 01");
# buffer vuoto di 2 byte per il checksum
VAR crc := BYTECOLLECTION(2);
# impacchetta il CRC16 con il byte basso per primo
PACKVALUE(crc, 0, LittleEndianUint16, CRC16(frame));
# aggiunge il checksum al frame
APPEND(frame, crc);
# Result: frame is 01 03 00 0A 00 01 A4 08
```

**Errori** — *CRC16 Unknown variant. Valid values are 'MODBUS', 'XMODEM', 'CCITT-FALSE', 'KERMIT'*.

**Disponibile** — TapHome Next 2026.1.40991+.

**Vedi anche** — [Crittografia e hash](https://taphome.com/it/docs/script/encryption-and-hashes/), [Dati binari](https://taphome.com/it/docs/script/binary-data/), [Conversioni tra tipi di dati](https://taphome.com/it/docs/script/data-type-conversions/).
