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.

Ultima actualizare:

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ă TapHome Next 2026.1.40991+.

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

# Base64 standard pentru doi octeți
TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
# base64url: fără completare, - și _ în loc de + și /
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
# decodarea base64url înapoi în text hex
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 — TapHome Next 2026.1.40991+.

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

# trei octeți ca Base64
TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
# Base64 înapoi în octeți, apoi text hex
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
# literele mari și spațiile sunt acceptate
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 — TapHome Next 2026.1.40991+.

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

# octeții cadrului din text hex
VAR frame := FROMHEX("01 03 00 0A 00 01");
# buffer gol de 2 octeți pentru suma de control
VAR crc := BYTECOLLECTION(2);
# împachetarea CRC16 cu octetul inferior primul
PACKVALUE(crc, 0, LittleEndianUint16, CRC16(frame));
# adăugarea sumei de control la cadru
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 — TapHome Next 2026.1.40991+.

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