TapHome

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.

Zuletzt aktualisiert:

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

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.

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

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

# Standard-Base64 von zwei Bytes
TOBASE64(FROMHEX("fbff"));
# Result: "+/8="
# base64url: ohne Padding, - und _ statt + und /
TOBASE64(FROMHEX("fbff"), "url");
# Result: "-_8"
# base64url zurück in Hex-Text dekodieren
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 — TapHome Next 2026.1.40991+.

TOHEX, FROMHEX

TOHEX liefert Bytedaten als Hexadezimaltext in Kleinbuchstaben, FROMHEX wandelt Hexadezimaltext zurück in Bytes.

1
2
TOHEX(data)
FROMHEX(text)

Hinweise

  • FROMHEX akzeptiert Ziffern in Groß- und Kleinbuchstaben und Leerzeichen dazwischen, wie bytes.fromhex in Python. Jedes andere Zeichen, auch ein Präfix 0x oder 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 FROMHEX keine Längenbegrenzung und nimmt daher alles zurück, was TOHEX erzeugt hat.

Beispiel

# drei Bytes als Base64
TOBASE64(FROMHEX("ff0080"));
# Result: "/wCA"
# Base64 zurück in Bytes, dann Hex-Text
TOHEX(FROMBASE64("/wCA"));
# Result: "ff0080"
# Großbuchstaben und Leerzeichen sind erlaubt
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 — TapHome Next 2026.1.40991+.

CRC16, CRC32

CRC16 liefert die 16-Bit-CRC-Prüfsumme von Bytedaten, CRC32 die CRC-32 von zlib, Ethernet und ZIP (Python zlib.crc32).

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

variant wählt die Parameter von CRC16, ohne Beachtung der Groß- und Kleinschreibung. Der Prüfwert ist die CRC des Texts "123456789":

variantPrüfwertAuch bekannt als
"MODBUS" (Standard)0x4B37Modbus-RTU-Frames
"XMODEM"0x31C3Python 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

# Frame-Bytes aus Hex-Text
VAR frame := FROMHEX("01 03 00 0A 00 01");
# leerer Puffer mit 2 Bytes für die Prüfsumme
VAR crc := BYTECOLLECTION(2);
# CRC16 mit dem niederwertigen Byte zuerst packen
PACKVALUE(crc, 0, LittleEndianUint16, CRC16(frame));
# Prüfsumme an den Frame anhängen
APPEND(frame, crc);
# Result: frame is 01 03 00 0A 00 01 A4 08

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

Verfügbar — TapHome Next 2026.1.40991+.

Siehe auch — Verschlüsselung und Hashes, Binärdaten, Konvertierung von Datentypen.