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.
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
TOSTRING(192, "X");
# Result: "C0"
TOSTRING(192, "X4");
# Result: "00C0"
TOSTRING(123.34, "F4");
# Result: "123.3400"
TOSTRING(123.34, "F0");
# Result: "123"
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
TODOUBLE("232");
# Result: 232
TODOUBLE("-192.332");
# Result: -192.332
TODOUBLE("some text");
# Result: NaN
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
VAR bytes := TOBYTES("Hello");
LENGTH(bytes);
# Result: 5
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.
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
DECODE("dXNlcjpwYXNz", "base64");
# Result: "user:pass"
DECODE("a < b", "xml");
# Result: "a < b"
DECODE(PARSEJSON(json, "payload"), "base64");Fehler — The provided text does not have the base64 format.; DECODE Unknown encoding. Valid values are ‘xml’, ‘base64’.