TapHome

Codificări de octeți și sume de control

Funcții de script TapHome TOBASE64 și FROMBASE64 (și base64url), TOHEX și FROMHEX, CRC16 și CRC32 — octeți ca text și înapoi și sume de control ale cadrelor.

TOBASE64, FROMBASE64, TOHEX, FROMHEX, CRC16 și CRC32 transformă octeții în text și înapoi și calculează sume de control, de obicei împreună cu funcțiile de criptare și hash. Ele doar construiesc valori, așa că funcționează în orice script. Toate necesită Core 2026.1 pe TapHome Next, build 40991 sau mai nou (încă nu este în versiunea oficială).

TOBASE64, TOHEX, CRC16 și CRC32 primesc date de octeți ca funcțiile de criptare: o collection<uint8>, un blob sau un șir, folosit ca octeți ISO-8859-1 (pentru UTF-8 transmiteți TOBYTES(text, "utf-8")). TOBASE64 și TOHEX returnează un șir, CRC16 și CRC32 un număr uint; FROMBASE64 și FROMHEX primesc text și returnează o collection<uint8>.

TOBASE64, FROMBASE64

TOBASE64 transformă date de octeți în text Base64, FROMBASE64 transformă textul Base64 înapoi în octeți.

1
2
TOBASE64(data [, variant])
FROMBASE64(text [, variant])

variant este "standard" (implicit) sau "url", fără deosebire între majuscule și minuscule. "url" este base64url (RFC 4648 §5), care folosește - și _ în loc de + și /. TOBASE64 cu "url" omite completarea =, așa cum așteaptă JWT și majoritatea API-urilor web (Python base64.urlsafe_b64encode(data).rstrip(b"=")); FROMBASE64 cu "url" acceptă text cu sau fără completare.

Returnează — TOBASE64 un șir, FROMBASE64 o collection<uint8>.

Observații — ENCODE și DECODE cu "base64" trec prin text UTF-8, așa că octeții peste 0x7F nu rămân intacți. Datele criptate și alte date binare trec prin TOBASE64 și FROMBASE64.

Exemplu

TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
TOHEX(FROMBASE64("-_8", "url"));
# Result: "fbff"

Erori — TOBASE64 Unknown variant. Valid values are ‘standard’, ‘url’ (FROMBASE64 își scrie propriul nume); 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.

Disponibilitate — Core 2026.1 pe TapHome Next, build 40991 sau mai nou (încă nu este în versiunea oficială).

TOHEX, FROMHEX

TOHEX returnează date de octeți ca text hexazecimal cu litere mici, FROMHEX transformă textul hexazecimal înapoi în octeți.

1
2
TOHEX(data)
FROMHEX(text)

Observații

  • FROMHEX acceptă cifre cu majuscule și minuscule și spații între ele, ca bytes.fromhex din Python. Orice alt caracter, inclusiv un prefix 0x sau separatori :, este o eroare, la fel ca un număr impar de cifre. Un șir gol dă o colecție goală.
  • Spre deosebire de BYTECOLLECTION din text hexazecimal, care ignoră în tăcere celelalte caractere și este limitată la 2048 de octeți, FROMHEX nu are limită de lungime, așa că transformă înapoi tot ce a produs TOHEX.

Exemplu

TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
TOHEX(FROMHEX("FF 00 80"));
# Result: "ff0080"

Erori — FROMHEX - invalid hex digit ‘x’ (eliminați un prefix sau separatorii cu REPLACE); FROMHEX - the number of hex digits must be even, it is N; FROMHEX - argument must be a string.

Disponibilitate — Core 2026.1 pe TapHome Next, build 40991 sau mai nou (încă nu este în versiunea oficială).

CRC16, CRC32

CRC16 returnează suma de control CRC pe 16 biți a datelor de octeți, CRC32 suma CRC-32 din zlib, Ethernet și ZIP (Python zlib.crc32).

1
2
CRC16(data [, variant])
CRC32(data)

variant alege parametrii funcției CRC16, fără deosebire între majuscule și minuscule. Valoarea de verificare este CRC-ul textului "123456789":

variantValoare de verificareCunoscut și ca
"MODBUS" (implicit)0x4B37cadre Modbus RTU
"XMODEM"0x31C3Python binascii.crc_hqx(data, 0)
"CCITT-FALSE"0x29B1"IBM-3740" este acceptat ca aceeași variantă
"KERMIT"0x2189

Valoarea de verificare a CRC32 este 0xCBF43926 (3421780262).

Returnează — un număr uint, nu octeți. Pentru a pune suma de control într-un cadru, împachetați-o cu PACKVALUE în ordinea octeților pe care o așteaptă protocolul; Modbus RTU trimite mai întâi octetul inferior.

Exemplu

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

Exemplu — adăugarea unei sume de control 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

Erori — CRC16 Unknown variant. Valid values are ‘MODBUS’, ‘XMODEM’, ‘CCITT-FALSE’, ‘KERMIT’.

Disponibilitate — Core 2026.1 pe TapHome Next, build 40991 sau mai nou (încă nu este în versiunea oficială).

Consultați și — Criptare și hash-uri, Date binare, Conversii de tipuri de date.