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.
| |
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.
| |
Observații
FROMHEXacceptă cifre cu majuscule și minuscule și spații între ele, cabytes.fromhexdin Python. Orice alt caracter, inclusiv un prefix0xsau 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,
FROMHEXnu are limită de lungime, așa că transformă înapoi tot ce a produsTOHEX.
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).
| |
variant alege parametrii funcției CRC16, fără deosebire între majuscule și minuscule. Valoarea de verificare este CRC-ul textului "123456789":
variant | Valoare de verificare | Cunoscut și ca |
|---|---|---|
"MODBUS" (implicit) | 0x4B37 | cadre Modbus RTU |
"XMODEM" | 0x31C3 | Python 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 08Erori — 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.