2.4.4.17.5 Literal Tokens

msdn link

Token Type

Byte-Code

Token Data Encoding

Invalid token

0x00

Padding value.

Signed int8

0x01

1 QWORD, least significant byte first, for the value, 2's complement, -128 to +127.

1 BYTE for sign. (possible values for sign in the following table) .

1 BYTE for base. (possible values for base in the following table).

Signed int16

0x02

1 QWORD, least significant byte first, 2's complement, -32768 to +32767.

1 BYTE for sign.

1 BYTE for base.

Signed int32

0x03

1 QWORD, least significant byte first, 2's complement.

1 BYTE for sign.

1 BYTE for base.

Signed int64

0x04

1 QWORD, least significant byte first, 2's complement.

1 BYTE for sign.

1 BYTE for base.

Unicode String

0x10

1 DWORD for the length in bytes.

1 WORD for each Unicode character. Characters are stored LSB first. Strings are not null-terminated.

Octet String

0x18

Custom data is represented as a contiguous sequence of bytes.

1 DWORD for the length in bytes.

1 BYTE for each data octet.

Composite

0x50

1 DWORD that specifies the entire length in bytes of the entire set of elements.

List type--can be heterogeneous. Elements are stored in contiguous fashion according to the built-in data type storage rules.

SID

0x51

1 DWORD that specifies the entire length in bytes of the SID.

SID in binary representation (as specified in section 2.4.2.2.)

Tokens in the preceding table that contain a base MUST include a base code from the following table.

Base

Code

Description

8

0x01

Octal

10

0x02

Decimal

16

0x03

Hexadecimal

Tokens in the preceding table that contain signs MUST include a sign code from the following table.

Relational operators interpret no sign (0x03) as positive.

Relational operators MUST use this to determine the sign of the literal during evaluation.

Sign

Code

Description

+

0x01

Plus sign in condition.

-

0x02

Minus sign in condition.

None

0x03

No sign in condition.

Thus the decimal value -1 encoded as a signed int64 would have the following binary representation (byte code, QWORD, sign byte, base byte):

 0x04 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x02 0x02
  

There are several things to note in the example. The sign and base bytes are used for display of the value. Even though the base byte indicates base 10, the value is stored as a 2's complement binary value. However, it will be displayed as a base 10 number.

The sign byte is handled similarly though with one important difference. If the sign byte indicates no sign, the value is treated as a positive number when displayed but appears with no explicit sign. However, when the value is used with a relational operator, the sign byte overrides the 2's complement sign.