Variablen-Deklarationen

WinHex & X-Ways

Variablen-Deklarationen

 

Der Rumpf eine Schablonen-Definition besteht im wesentlichen aus Variablen-Deklarationen, ähnlich wie die in Programmiersprachen. Eine Deklaration hat folgende Gestalt:

 

type "Bezeichnung"

 

wobei type einer der folgenden Datentypen sein kann:

 

• int8, uint8 = byte, int16, uint16, in24, uint24, int32, uint32, uint48, int64,

• uint_flex,

• binary,

• float = single, real, double, longdouble = extended,

• char, char16, string, string16,

• zstring, zstring16,

• boole8 = boolean, boole16, boole32,

• hex,

• DOSDateTime, FileTime, OLEDateTime, SQLDateTime, UNIXDateTime = time_t, JavaDateTime,

• GUID

 

Die Bezeichnung der Variablen muß nur dann in Hochkammata gesetzt werden, wenn sie Leerzeichen enthält. Sie darf nicht nur aus Ziffern bestehen. WinHex unterscheidet nicht zwischen Groß- und Kleinschreibung. Maximal werden zur Identifikation einer Variablen 41 Zeichen verwendet.

 

type kann jeweils maximal ein Modifikator der folgenden Modifikatorengruppen vorangestellt werden:

 

big-endian                                little-endian                (s. Endian-ness)

hexadecimal                                decimal                                octal

read-only                                read-write

local

 

Diese Modifikatoren wirken sich nur auf die unmittelbar folgende Variable aus. Sie sind redundant, wenn sie bereits im Definition-Kopf angegeben werden. "local" übersetzt Zeitstempel außer DOSDateTime von UTC in die in den Allgemeinen Optionen angegebene Zeitzone.

 

Die Nummern am Ende der Typnamen bezeichnet die Größe einer Variablen dieses Typs (Strings: eines Zeichens) in Bits. Mit den Typen "char16" und "string16" unterstützt WinHex Unicode-Zeichen und -Strings. Höhere Unicode-Zeichen als die ersten 256 ANSI-äquivalenten werden allerdings nicht unterstützt. Es können außerdem maximal Strings einer Größe von 8192 Bytes editiert werden.

 

Die Typen "string", "string16" und "hex" erfordern einen zusätzlichen Parameter, der die Anzahl der Elemente angibt. Dieser Parameter kann eine Konstante oder eine zuvor deklarierte Variable sein. Wenn es sich um eine Konstante handelt, kann sie entweder dezimal oder hexadezimal geschrieben werden, im zweiten Fall muß ihr "0x" vorangestellt werden.

 

Sie können Arrays (Felder) deklarieren, indem Sie in eckigen Klammern die gewünschte Größe angeben, entweder hinter der Typangabe oder hinter der Variablenbezeichnung. Geben Sie "unlimited" als Array-Größe an, hört die Schablone mit dem Auslesen der Daten erst auf, wenn das Dateiende erreicht wird. Bspw. deklarieren die folgenden zwei Zeilen einen ASCII-String, dessen Länge dynamisch von der vorherigen Variable bestimmt wird:

 

         uint8                                "Länge"

         char[Länge]                "Ein String"

 

Dasselbe Ergebnis könnte mit folgenden zwei Deklarationen erzielt werden:

 

         byte                                "Länge"

         string Länge                "Ein String"

 

Eine Tilde ("~") kann als Platzhalter eingesetzt werden, um zur Laufzeit mit der tatsächlichen Array-Elementnummer ersetzt werden (s. u. Fortgeschrittene Befehle). Dies trifft nicht auf Arrays des Typs char zu, da diese von WinHex automatisch in einen String übersetzt werden.

 

Numerische Parameter für string-, string16- und hex-Variablen ebenso wie die Größenangaben von Arrays dürfen in mathematischer Notation angegeben werden. Sie werden vom integrierten Formel-Parser verarbeitet. Solche Ausdrücke müssen in Klammern angegeben werden. Sie dürfen keine Leerzeichen enthalten. Sie dürfen zuvor deklarierte Integer-Variablen verwenden, deren Namen selbst ebenfalls keine Leerzeichen enthalten. Unterstützte Operationen sind die Addition (+), Subtraktion (-), Multiplikation (*), Integer-Division (/), Modulo-Division (%), bitweises AND (&), bitweises OR (|) und bitweises XOR (^). Gültige mathematische Ausdrücke sind zum Beispiel (5*2+1) oder (len1/(len2+4)). Das Resultat ist immer ein Integer und muss ein positiver Wert sein.

 

zstring und zstring16 sind Null-terminierte Strings, deren Größe dynamisch zur Laufzeit bestimmt wird.