Konvertierung von Datentypen
Konvertierungsfunktionen der TapHome-Skripte — TOSTRING mit Formatstrings für Zahlen und Datum, TODOUBLE, TOBYTES sowie ENCODE / DECODE für XML-Maskierung und Base64.
Zuletzt aktualisiert:
Konvertierungsfunktionen wandeln Werte in Text und zurück um: Zahlen und Datumswerte in formatierten Text, Text in Zahlen und Bytes sowie Text in Base64 oder eine XML-sichere Form. Die BCD-Konvertierung (TOBCD, FROMBCD) ist unter Bitoperationen beschrieben, die Farbkonvertierung (HSVTORGB, RGBTOHSV) unter Farben.
TOSTRING
TOSTRING wandelt jeden Wert in Text um — Zahlen und Datumswerte mit einem optionalen .NET-Formatstring, Bytesammlungen und Blobs mit einer Textkodierung.
| |
| Eingabe | Ergebnis |
|---|---|
| String | Unverändert. |
| Zahl | Ohne Format die einfache Zahl mit Dezimalpunkt (21.5). Mit Format siehe Formatstrings. |
datetime | Ohne Format yyyy/MM/dd hh:mm:ss.fff (12-Stunden-Format, ohne AM oder PM); mit Format das angegebene Muster. |
collection<uint8>, Blob | Die Bytes als Text dekodiert. Das zweite Argument ist der Name der Kodierung, standardmäßig iso-8859-1, zum Beispiel "utf-8". |
| andere Sammlung | Fehler Cannot cast collection of ‘X’ to string. |
Beispiel
# Hexadezimaltext, Großbuchstaben
TOSTRING(192, "X");
# Result: "C0"
TOSTRING(192, "X4");
# Result: "00C0"
# feste Anzahl Dezimalstellen
TOSTRING(123.34, "F4");
# Result: "123.3400"
TOSTRING(123.34, "F0");
# Result: "123"
# Bytes als Text dekodiert
TOSTRING(BYTECOLLECTION("48656c6c6f"));
# Result: "Hello"
TOSTRING(BYTECOLLECTION("48656c6c6f"), "iso-8859-1");
# Result: "Hello"In einem Listener-Skript liest TOSTRING(RECEIVEDMSG.PAYLOAD, "utf-8") die empfangene Nachricht als Text — siehe RECEIVEDMSG.
Formatstrings
TOSTRING formatiert Zahlen und Datumswerte mit .NET-Formatstrings und verwendet immer einen Dezimalpunkt, unabhängig von den Spracheinstellungen der Steuereinheit.
| Format | Eingabe | Ausgabe |
|---|---|---|
"F2" | 231.4721 | "231.47" — feste Anzahl von Dezimalstellen |
"F0" | 21.5 | "22" — auf eine ganze Zahl gerundet |
"0.0" | 7 | "7.0" — benutzerdefiniertes Muster |
"00" | 7 | "07" — führende Nullen |
"X", "X4" | 255 | "FF", "00FF" — hexadezimal, Großbuchstaben |
"yyyy-MM-dd" | datetime | "2026-01-15" |
"HH:mm" | datetime | "08:30" — 24-Stunden-Format |
"dd.MM.yyyy HH:mm:ss" | datetime | "15.01.2026 08:30:00" |
Hinweise
- Ein Format, das ein großes
Xenthält, wandelt den Wert zuerst in eine 32-Bit-Ganzzahl um und gibt sie dann hexadezimal aus. - In Datumsformaten ist
HHdas 24-Stunden-Format undhhdas 12-Stunden-Format;MMist der Monat undmmdie Minute.
Beispiel — Zeitstempel für ein Protokoll oder eine HTTP-Anfrage
VAR now := NOW();
"Updated " + TOSTRING(now, "dd.MM.yyyy HH:mm");TODOUBLE
TODOUBLE liest eine Zahl aus Text mit Dezimalpunkt und gibt NaN zurück, wenn der Text keine Zahl ist.
| |
Rückgabewert — double. NaN, wenn der Text nicht gelesen werden kann; 0 für Null.
Hinweise — Der Text wird immer mit Dezimalpunkt gelesen. Ein Komma gilt als Tausendertrennzeichen, daher ergibt "1,5" den Wert 15. Ersetzen Sie das Komma zuerst, wenn die Quelle ein Dezimalkomma verwendet.
Beispiel
# Text mit Dezimalpunkt in eine Zahl
TODOUBLE("232");
# Result: 232
TODOUBLE("-192.332");
# Result: -192.332
# keine Zahl ergibt NaN
TODOUBLE("some text");
# Result: NaN
# Dezimalkomma zuerst durch Punkt ersetzen
TODOUBLE(REPLACE("21,5", ",", "."));
# Result: 21.5TOBYTES
TOBYTES kodiert Text in eine Bytesammlung (collection<uint8>) und verwendet dabei iso-8859-1, sofern keine andere Kodierung angegeben ist.
| |
Hinweise — Ältere Dokumentation nannte diese Funktion TOBYTEARRAY; diesen Namen gibt es in der Sprache nicht. Verwenden Sie TOBYTES, um Daten für SENDDATA oder für UNPACKVALUE vorzubereiten.
Beispiel
# Text in Bytes, Standard iso-8859-1
VAR bytes := TOBYTES("Hello");
LENGTH(bytes);
# Result: 5
# Kodierung ausdrücklich angegeben
VAR euro := TOBYTES("€", "utf-8");
LENGTH(euro);
# Result: 3Fehler — TOBYTES - argument 1 must be a string (der Text ist Null); TOBYTES - unknown encoding.
ENCODE
ENCODE maskiert Text für XML ("xml") oder kodiert ihn als Base64 ("base64", aus den UTF-8-Bytes des Textes).
| |
Hinweise
"xml"ersetzt&,',",>und<durch&,',",>und<.- Leerer Text ergibt einen leeren String. Beim Namen der Kodierung wird die Groß- und Kleinschreibung nicht unterschieden.
"base64"erfordert Core 2022.2 oder neuer."base64"kodiert die UTF-8-Bytes eines Texts. Für Binärdaten, etwa verschlüsselte Bytes, verwenden Sie TOBASE64.
Beispiel
ENCODE("a<b & c>d", "xml");
# Result: "a<b & c>d"
ENCODE("user:pass", "base64");
# Result: "dXNlcjpwYXNz"Beispiel — HTTP-Basic-Authorization-Header
VAR auth := "Authorization: Basic " + ENCODE("user:pass", "base64");
VAR response := SENDHTTPREQUEST("/status", "GET", "", auth);Fehler — ENCODE Unknown encoding. Valid values are ‘xml’, ‘base64’.
DECODE
DECODE kehrt ENCODE um: Es wandelt XML-Entitäten wieder in Zeichen um ("xml") oder dekodiert Base64 in UTF-8-Text ("base64").
| |
Beispiel
# Base64 in UTF-8-Text
DECODE("dXNlcjpwYXNz", "base64");
# Result: "user:pass"
# XML-Entität zurück in ein Zeichen
DECODE("a < b", "xml");
# Result: "a < b"
# Base64-Wert aus JSON dekodieren
DECODE(PARSEJSON(json, "payload"), "base64");Hinweise — "base64" liefert UTF-8-Text, daher überstehen Bytes über 0x7F es nicht. Dekodieren Sie Binärdaten, etwa verschlüsselte Bytes, mit FROMBASE64.
Fehler — The provided text does not have the base64 format.; DECODE Unknown encoding. Valid values are ‘xml’, ‘base64’.