Unions

If you have ever programmed in Pascal or C, you may be familiar with the concept of a Union.  A Union is similar in some ways to a User-Defined Type.  Both have data fields that can be made up of any of PowerBASIC's data types, including records and other Unions, and except for the UNION keyword, they are defined the same way.  The major difference between User-Defined Types and Unions, is that each field within a Union occupies the same memory location as all the others.

While the concept may appear abstract, Unions provide an avenue to freely convert data from one format to another, simply by writing the data into the Union as one data format, and reading the data back as another.  Combining the versatility of a UDT with the flexibility of a Union can extend this functionality dramatically, such as splitting data into its component parts.

For example, the following definition would create a Union called WordFld and a WordFld variable called MyVar:

TYPE HiLo

  Hi AS BYTE

  Lo AS BYTE

END TYPE

 

UNION WordFld

  Whole AS WORD

  Part  AS HiLo

END UNION

 

DIM MyVar AS WordFld

 

MyVar.Whole = &HBC1F      'assign a value to the entire word

a$ = HEX$(MyVar.Part.Hi)  'returns Hi byte of the word

b$ = HEX$(MyVar.Part.Lo)  'returns Lo byte of the word

When you access the field MyVar.Whole, you are reading the entire contents of the Union as a word.  On the other hand, when you refer to MyVar.Part.Hi, you are referring to the high byte of MyVar.

 

See Also

User-Defined Types (UDTs)

Union Storage requirements and restrictions