TapHome

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.

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. Costruiscono solo valori, quindi funzionano in ogni script. Tutte richiedono Core 2026.1 su TapHome Next, build 40991 o più recente (non ancora nella versione ufficiale).

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.

1
2
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 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

TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
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 — Core 2026.1 su TapHome Next, build 40991 o più recente (non ancora nella versione ufficiale).

TOHEX, FROMHEX

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

1
2
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 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

TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
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 — Core 2026.1 su TapHome Next, build 40991 o più recente (non ancora nella versione ufficiale).

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

1
2
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":

variantValore di controlloNoto anche come
"MODBUS" (predefinito)0x4B37frame Modbus RTU
"XMODEM"0x31C3Python 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 nell’ordine dei byte che il protocollo si aspetta; Modbus RTU invia per primo il byte basso.

Esempio

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

Esempio — aggiungere un checksum Modbus RTU

VAR frame := FROMHEX("01 03 00 0A 00 01");
VAR crc := BYTECOLLECTION(2);
PACKVALUE(crc, 0, LittleEndianUint16, CRC16(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 — Core 2026.1 su TapHome Next, build 40991 o più recente (non ancora nella versione ufficiale).

Vedi anche — Crittografia e hash, Dati binari, Conversioni tra tipi di dati.