TapHome

Kódování bajtů a kontrolní součty

Funkce skriptu TapHome TOBASE64 a FROMBASE64 (i base64url), TOHEX a FROMHEX, CRC16 a CRC32 — bajty jako text a zpět a kontrolní součty rámců.

TOBASE64, FROMBASE64, TOHEX, FROMHEX, CRC16 a CRC32 převádějí bajty na text a zpět a počítají kontrolní součty, obvykle spolu se šifrovacími a hašovacími funkcemi. Pouze sestavují hodnoty, takže fungují v každém skriptu. Všechny potřebují Core 2026.1 v TapHome Next, build 40991 nebo novější (zatím ne v oficiálním vydání).

TOBASE64, TOHEX, CRC16 a CRC32 přijímají bajtová data stejně jako šifrovací funkce: collection<uint8>, blob nebo řetězec, použitý jako bajty ISO-8859-1 (pro UTF-8 předejte TOBYTES(text, "utf-8")). TOBASE64 a TOHEX vrátí řetězec, CRC16 a CRC32 číslo uint; FROMBASE64 a FROMHEX přijímají text a vrátí collection<uint8>.

TOBASE64, FROMBASE64

TOBASE64 převede bajtová data na text Base64, FROMBASE64 převede text Base64 zpět na bajty.

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

variant je "standard" (výchozí) nebo "url", na velikosti písmen nezáleží. "url" je base64url (RFC 4648 §5), který místo + a / používá - a _. TOBASE64 s "url" vynechá doplnění =, jak to očekává JWT a většina webových API (v Pythonu base64.urlsafe_b64encode(data).rstrip(b"=")); FROMBASE64 s "url" přijme text s doplněním i bez něj.

Vrací — TOBASE64 řetězec, FROMBASE64 collection<uint8>.

Poznámky — ENCODE a DECODE s "base64" procházejí přes text v UTF-8, takže bajty nad 0x7F se v nich poškodí. Zašifrovaná a jiná binární data převádějte přes TOBASE64 a FROMBASE64.

Příklad

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

Chyby — TOBASE64 Unknown variant. Valid values are ‘standard’, ‘url’ (FROMBASE64 uvádí svůj název); 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.

Dostupnost — Core 2026.1 v TapHome Next, build 40991 nebo novější (zatím ne v oficiálním vydání).

TOHEX, FROMHEX

TOHEX vrátí bajtová data jako šestnáctkový text malými písmeny, FROMHEX převede šestnáctkový text zpět na bajty.

1
2
TOHEX(data)
FROMHEX(text)

Poznámky

  • FROMHEX přijímá číslice velkými i malými písmeny a mezery mezi nimi, jako bytes.fromhex v Pythonu. Každý jiný znak včetně předpony 0x nebo oddělovačů : je chyba, stejně jako lichý počet číslic. Prázdný řetězec dá prázdnou kolekci.
  • Na rozdíl od BYTECOLLECTION ze šestnáctkového textu, která jiné znaky potichu ignoruje a má limit 2048 bajtů, nemá FROMHEX omezení délky, takže převede zpět všechno, co vytvořila TOHEX.

Příklad

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

Chyby — FROMHEX - invalid hex digit ‘x’ (předponu nebo oddělovače odstraňte funkcí REPLACE); FROMHEX - the number of hex digits must be even, it is N; FROMHEX - argument must be a string.

Dostupnost — Core 2026.1 v TapHome Next, build 40991 nebo novější (zatím ne v oficiálním vydání).

CRC16, CRC32

CRC16 vrátí 16bitový kontrolní součet CRC bajtových dat, CRC32 součet CRC-32 podle zlib, Ethernetu a ZIP (v Pythonu zlib.crc32).

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

variant vybírá parametry funkce CRC16, na velikosti písmen nezáleží. Kontrolní hodnota je CRC textu "123456789":

variantKontrolní hodnotaZnámý také jako
"MODBUS" (výchozí)0x4B37rámce Modbus RTU
"XMODEM"0x31C3binascii.crc_hqx(data, 0) v Pythonu
"CCITT-FALSE"0x29B1"IBM-3740" se přijímá jako stejná varianta
"KERMIT"0x2189

Kontrolní hodnota CRC32 je 0xCBF43926 (3421780262).

Vrací — číslo uint, ne bajty. Chcete-li kontrolní součet vložit do rámce, zabalte ho funkcí PACKVALUE v pořadí bajtů, které protokol očekává; Modbus RTU posílá nižší bajt jako první.

Příklad

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

Příklad — připojení kontrolního součtu 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

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

Dostupnost — Core 2026.1 v TapHome Next, build 40991 nebo novější (zatím ne v oficiálním vydání).

Viz také — Šifrování a haše, Binární data, Převody datových typů.