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.
| |
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.
| |
Poznámky
FROMHEXpřijímá číslice velkými i malými písmeny a mezery mezi nimi, jakobytes.fromhexv Pythonu. Každý jiný znak včetně předpony0xnebo 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á
FROMHEXomezení délky, takže převede zpět všechno, co vytvořilaTOHEX.
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).
| |
variant vybírá parametry funkce CRC16, na velikosti písmen nezáleží. Kontrolní hodnota je CRC textu "123456789":
variant | Kontrolní hodnota | Známý také jako |
|---|---|---|
"MODBUS" (výchozí) | 0x4B37 | rámce Modbus RTU |
"XMODEM" | 0x31C3 | binascii.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 08Chyby — 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ů.