Kodowanie bajtów i sumy kontrolne
Funkcje skryptu TapHome TOBASE64 i FROMBASE64 (także base64url), TOHEX i FROMHEX, CRC16 i CRC32 — bajty jako tekst i z powrotem oraz sumy kontrolne ramek.
TOBASE64, FROMBASE64, TOHEX, FROMHEX, CRC16 i CRC32 zamieniają bajty na tekst i z powrotem oraz liczą sumy kontrolne, zwykle razem z funkcjami szyfrowania i skrótów. Tylko budują wartości, więc działają w każdym skrypcie. Wszystkie wymagają Core 2026.1 w TapHome Next, kompilacja 40991 lub nowsza (jeszcze nie w oficjalnym wydaniu).
TOBASE64, TOHEX, CRC16 i CRC32 przyjmują dane bajtowe tak jak funkcje szyfrowania: collection<uint8>, blob lub tekst, używany jako bajty ISO-8859-1 (dla UTF-8 przekaż TOBYTES(text, "utf-8")). TOBASE64 i TOHEX zwracają tekst, CRC16 i CRC32 liczbę uint; FROMBASE64 i FROMHEX przyjmują tekst i zwracają collection<uint8>.
TOBASE64, FROMBASE64
TOBASE64 zamienia dane bajtowe na tekst Base64, FROMBASE64 zamienia tekst Base64 z powrotem na bajty.
| |
variant to "standard" (domyślny) lub "url", bez rozróżniania wielkości liter. "url" to base64url (RFC 4648 §5), który zamiast + i / używa - i _. TOBASE64 z "url" pomija dopełnienie =, czego oczekuje JWT i większość webowych API (Python base64.urlsafe_b64encode(data).rstrip(b"=")); FROMBASE64 z "url" przyjmuje tekst z dopełnieniem i bez niego.
Zwraca — TOBASE64 tekst, FROMBASE64 collection<uint8>.
Uwagi — ENCODE i DECODE z "base64" przechodzą przez tekst UTF-8, więc bajty powyżej 0x7F nie są w nich zachowane. Zaszyfrowane i inne dane binarne przekazuj przez TOBASE64 i FROMBASE64.
Przykład
TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
TOHEX(FROMBASE64("-_8", "url"));
# Result: "fbff"Błędy — TOBASE64 Unknown variant. Valid values are ‘standard’, ‘url’ (FROMBASE64 podaje swoją nazwę); 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.
Dostępność — Core 2026.1 w TapHome Next, kompilacja 40991 lub nowsza (jeszcze nie w oficjalnym wydaniu).
TOHEX, FROMHEX
TOHEX zwraca dane bajtowe jako tekst szesnastkowy małymi literami, FROMHEX zamienia tekst szesnastkowy z powrotem na bajty.
| |
Uwagi
FROMHEXprzyjmuje cyfry wielkimi i małymi literami oraz spacje między nimi, tak jakbytes.fromhexw Pythonie. Każdy inny znak, w tym prefiks0xlub separatory:, jest błędem, podobnie jak nieparzysta liczba cyfr. Pusty tekst daje pustą kolekcję.- W przeciwieństwie do funkcji BYTECOLLECTION z tekstu szesnastkowego, która po cichu ignoruje inne znaki i jest ograniczona do 2048 bajtów,
FROMHEXnie ma limitu długości, więc zamienia z powrotem wszystko, co wytworzyłoTOHEX.
Przykład
TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
TOHEX(FROMHEX("FF 00 80"));
# Result: "ff0080"Błędy — FROMHEX - invalid hex digit ‘x’ (usuń prefiks lub separatory funkcją REPLACE); FROMHEX - the number of hex digits must be even, it is N; FROMHEX - argument must be a string.
Dostępność — Core 2026.1 w TapHome Next, kompilacja 40991 lub nowsza (jeszcze nie w oficjalnym wydaniu).
CRC16, CRC32
CRC16 zwraca 16-bitową sumę kontrolną CRC danych bajtowych, CRC32 sumę CRC-32 z zlib, Ethernetu i ZIP (Python zlib.crc32).
| |
variant wybiera parametry CRC16, bez rozróżniania wielkości liter. Wartość kontrolna to CRC tekstu "123456789":
variant | Wartość kontrolna | Znany też jako |
|---|---|---|
"MODBUS" (domyślny) | 0x4B37 | ramki Modbus RTU |
"XMODEM" | 0x31C3 | Python binascii.crc_hqx(data, 0) |
"CCITT-FALSE" | 0x29B1 | "IBM-3740" jest akceptowany jako ten sam wariant |
"KERMIT" | 0x2189 |
Wartość kontrolna CRC32 to 0xCBF43926 (3421780262).
Zwraca — liczbę uint, nie bajty. Aby umieścić sumę kontrolną w ramce, spakuj ją funkcją PACKVALUE w kolejności bajtów, której oczekuje protokół; Modbus RTU wysyła najpierw młodszy bajt.
Przykład
TOSTRING(CRC16(FROMHEX("0103000A0001")), "X4");
# Result: "08A4"
TOSTRING(CRC32("123456789"), "X8");
# Result: "CBF43926"Przykład — dołączenie sumy kontrolnej 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 08Błędy — CRC16 Unknown variant. Valid values are ‘MODBUS’, ‘XMODEM’, ‘CCITT-FALSE’, ‘KERMIT’.
Dostępność — Core 2026.1 w TapHome Next, kompilacja 40991 lub nowsza (jeszcze nie w oficjalnym wydaniu).
Zobacz też — Szyfrowanie i skróty, Dane binarne, Konwersje typów danych.