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.
| |
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.
| |
Note
FROMHEXaccetta cifre maiuscole e minuscole e spazi tra di esse, comebytes.fromhexin Python. Qualsiasi altro carattere, compreso un prefisso0xo 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,
FROMHEXnon ha limiti di lunghezza, quindi riconverte tutto ciò cheTOHEXha 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).
| |
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 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 08Errori — 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.