Byte-Kodierungen und Prüfsummen
Funktionen des TapHome-Skripts TOBASE64 und FROMBASE64 (auch base64url), TOHEX und FROMHEX, CRC16 und CRC32 — Bytes als Text und zurück und Prüfsummen von Frames.
TOBASE64, FROMBASE64, TOHEX, FROMHEX, CRC16 und CRC32 wandeln Bytes in Text und zurück und berechnen Prüfsummen, meist zusammen mit den Verschlüsselungs- und Hashfunktionen. Sie bauen nur Werte, deshalb funktionieren sie in jedem Skript. Alle brauchen Core 2026.1 in TapHome Next, Build 40991 oder neuer (noch nicht im offiziellen Release).
TOBASE64, TOHEX, CRC16 und CRC32 nehmen Bytedaten wie die Verschlüsselungsfunktionen an: eine collection<uint8>, einen Blob oder einen String, der als ISO-8859-1-Bytes verwendet wird (für UTF-8 übergeben Sie TOBYTES(text, "utf-8")). TOBASE64 und TOHEX liefern einen String, CRC16 und CRC32 eine Zahl uint; FROMBASE64 und FROMHEX nehmen Text an und liefern eine collection<uint8>.
TOBASE64, FROMBASE64
TOBASE64 wandelt Bytedaten in Base64-Text um, FROMBASE64 wandelt Base64-Text zurück in Bytes.
| |
variant ist "standard" (Standard) oder "url", ohne Beachtung der Groß- und Kleinschreibung. "url" ist base64url (RFC 4648 §5), das - und _ statt + und / verwendet. TOBASE64 mit "url" lässt das Padding = weg, wie es JWT und die meisten Web-APIs erwarten (Python base64.urlsafe_b64encode(data).rstrip(b"=")); FROMBASE64 mit "url" akzeptiert Text mit und ohne Padding.
Rückgabewert — TOBASE64 einen String, FROMBASE64 eine collection<uint8>.
Hinweise — ENCODE und DECODE mit "base64" gehen über UTF-8-Text, daher überstehen Bytes über 0x7F sie nicht. Verschlüsselte und andere Binärdaten gehen über TOBASE64 und FROMBASE64.
Beispiel
TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
TOHEX(FROMBASE64("-_8", "url"));
# Result: "fbff"Fehler — TOBASE64 Unknown variant. Valid values are ‘standard’, ‘url’ (FROMBASE64 nennt seinen eigenen Namen); 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.
Verfügbar — Core 2026.1 in TapHome Next, Build 40991 oder neuer (noch nicht im offiziellen Release).
TOHEX, FROMHEX
TOHEX liefert Bytedaten als Hexadezimaltext in Kleinbuchstaben, FROMHEX wandelt Hexadezimaltext zurück in Bytes.
| |
Hinweise
FROMHEXakzeptiert Ziffern in Groß- und Kleinbuchstaben und Leerzeichen dazwischen, wiebytes.fromhexin Python. Jedes andere Zeichen, auch ein Präfix0xoder Trennzeichen:, ist ein Fehler, ebenso eine ungerade Anzahl von Ziffern. Ein leerer String ergibt eine leere Sammlung.- Anders als BYTECOLLECTION aus Hexadezimaltext, das andere Zeichen stillschweigend ignoriert und auf 2048 Bytes begrenzt ist, hat
FROMHEXkeine Längenbegrenzung und nimmt daher alles zurück, wasTOHEXerzeugt hat.
Beispiel
TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
TOHEX(FROMHEX("FF 00 80"));
# Result: "ff0080"Fehler — FROMHEX - invalid hex digit ‘x’ (entfernen Sie ein Präfix oder Trennzeichen mit REPLACE); FROMHEX - the number of hex digits must be even, it is N; FROMHEX - argument must be a string.
Verfügbar — Core 2026.1 in TapHome Next, Build 40991 oder neuer (noch nicht im offiziellen Release).
CRC16, CRC32
CRC16 liefert die 16-Bit-CRC-Prüfsumme von Bytedaten, CRC32 die CRC-32 von zlib, Ethernet und ZIP (Python zlib.crc32).
| |
variant wählt die Parameter von CRC16, ohne Beachtung der Groß- und Kleinschreibung. Der Prüfwert ist die CRC des Texts "123456789":
variant | Prüfwert | Auch bekannt als |
|---|---|---|
"MODBUS" (Standard) | 0x4B37 | Modbus-RTU-Frames |
"XMODEM" | 0x31C3 | Python binascii.crc_hqx(data, 0) |
"CCITT-FALSE" | 0x29B1 | "IBM-3740" wird als dieselbe Variante akzeptiert |
"KERMIT" | 0x2189 |
Der Prüfwert von CRC32 ist 0xCBF43926 (3421780262).
Rückgabewert — eine Zahl uint, keine Bytes. Um die Prüfsumme in einen Frame einzufügen, packen Sie sie mit PACKVALUE in der Bytereihenfolge, die das Protokoll erwartet; Modbus RTU sendet das niederwertige Byte zuerst.
Beispiel
TOSTRING(CRC16(FROMHEX("0103000A0001")), "X4");
# Result: "08A4"
TOSTRING(CRC32("123456789"), "X8");
# Result: "CBF43926"Beispiel — eine Modbus-RTU-Prüfsumme anhängen
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 08Fehler — CRC16 Unknown variant. Valid values are ‘MODBUS’, ‘XMODEM’, ‘CCITT-FALSE’, ‘KERMIT’.
Verfügbar — Core 2026.1 in TapHome Next, Build 40991 oder neuer (noch nicht im offiziellen Release).
Siehe auch — Verschlüsselung und Hashes, Binärdaten, Konvertierung von Datentypen.