www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Union member positions?

reply z <z z.com> writes:
Is it possible to set a "position" on a union member? or is there 
is a language-integrated equivalent?
For example, to get access to each byte in an unsigned integer 
while still supporting the original type.
```D
///a single uint that would be accessed as two ushort, or four 
separate ubyte
union UnionExample{
uint EAX;

//upper
ushort EAHX;

ubyte EAHH;
ubyte EAHL;

//lower
ushort EALX;

ubyte EALH;
ubyte EALL;
}
```
Thanks.
Aug 17 2021
next sibling parent Dennis <dkorpel gmail.com> writes:
On Tuesday, 17 August 2021 at 13:46:22 UTC, z wrote:
 Is it possible to set a "position" on a union member?
You can use anonymous `struct` and `union` blocks. ```D union UnionExample{ uint EAX; struct { //upper union { ushort EAHX; struct { ubyte EAHH; ubyte EAHL; } } //lower union { ushort EALX; struct { ubyte EALH; ubyte EALL; } } } } ```
Aug 17 2021
prev sibling parent ag0aep6g <anonymous example.com> writes:
On 17.08.21 15:46, z wrote:
 Is it possible to set a "position" on a union member? or is there is a 
 language-integrated equivalent?
 For example, to get access to each byte in an unsigned integer while 
 still supporting the original type.
 ```D
 ///a single uint that would be accessed as two ushort, or four separate 
 ubyte
 union UnionExample{
 uint EAX;
 
 //upper
 ushort EAHX;
 
 ubyte EAHH;
 ubyte EAHL;
 
 //lower
 ushort EALX;
 
 ubyte EALH;
 ubyte EALL;
 }
 ```
 Thanks.
union UnionExample { uint EAX; struct { union // upper { ushort EAHX; struct { ubyte EAHH; ubyte EAHL; } } union // lower { ushort EALX; struct { ubyte EALH; ubyte EALL; } } } }
Aug 17 2021