Um den Bytewert eines Zeichens zu ermitteln verwenden wir die Lua String
Funktion string.byte(i)
In Zeile 4 werden alle Byte bzw Zeichenwerte des Strings aufaddiert nach-
einander aufaddiert. Eine alternative, Objekt orientierte Variante um die byte
aufzurufen ist:
chksum = chksum + data : b y t e ( i )
Lua bietet mit dem Doppelpunkt : eine spezielle Syntax um auf Funktionen
oder Variablen eines 'Objekts' zuzugreifen. Im Gegensatz zu einem Modul ist
ein Objekt als eine Instanz eines Datentyps zu verstehen. In unserem Fall ist
die übergebene Datensequenz ein String Objekt und nicht zu verwechseln mit
dem String Modul.
So wie der Punkt bei einer Modulfunktion den Funktionsnamen innerhalb Mo-
duls klassifiziert, weist der : Lua an, die Funktion rechts vom Doppelpunkt des
zugehörigen Objekts bzw. Datentyps links davon aufzurufen. In unserem Fall ist
der Datentype von data ein String und Lua ruft die Funktion string.byte( data )
auf, wobei data automatisch übergeben wird. Beide folgenden Aufrufe sind so-
mit identisch:
data : b y t e ( i )
s t r i n g . b y t e ( data , i )
Wenn Sie mit Objekt orientierten Sprachen wie C++ oder JavaScript vertraut
sind, können Sie den Doppelpunkt einfach wie den Punkt in diesen Program-
miersprachen ansehen.
Zeile 6 letztendlich liefert die untersten 8 Bit der Prüfsumme indem es den Mo-
dule 256 Wert von chksum zurück gibt.
Normalerweise wird die Prüfsumme am Ende der zu übertragenen Datense-
quenz angehängt. Wenn Sie die Prüfsumme eines empfangenen Telegramms
verifizieren wollen, müssen Sie die Prüfsumme aller Bytes mit Ausnahme der
angehängten Prüfsumme bilden. D.h. Sie müssen einen bestimmten Ausschnitt
des Telegramm Strings an die Checksum Funktion übergeben.
Mit string.sub enthält Lua einen mächtige Funktion um beliebige Zeichen-
folgen aus einem String zu extrahieren. Start und Ende werden als Indexe
übergeben wobei negative Indexe vom Stringende zählen. Dies macht es be-
sonders einfach z.B. die letzten beiden Zeichen einer Zeichenkette zu ermitteln
ohne die Stringlänge berücksichtigen zu müssen. Die folgenden Beispiele zei-
gen die Idee hinter diesem Konzept:
1
seq = " H e l l o w o r l d ! "
2
p r i n t ( s t r i n g . sub ( seq , 7 ) )
3
p r i n t ( s t r i n g . sub ( seq , 1 , 5 ) )
4
p r i n t ( s t r i n g . sub ( seq ,
5
p r i n t ( seq : sub (
Die String Methode (oder Funktion) sub wird mit drei Parametern aufgerufen:
s t r i n g . sub ( STRING , FROM, TO )
3
Die byte Funktion bietet einen optionalen zweiten Index Parameter um die Werte gleich meh-
rerer Zeichen zu ermitteln. Hier verwenden wir die einfache Variante
3
.
> w o r l d !
> H e l l o
6 ) )
> w o r l d !
6,
2 ) )
> w o r l d
17.1. ERSTE SCHRITTE
197