 
A simple union in c might look as the one below:
union simpleUnion
{
	char a[10];
	int b;
}
  
  
The memory allocation would require sizeof(char) * 10 bytes (since it is the biggest element in that union).
Our task is to marshal this type into unmanaged environment:
We need to control the memory position of each member of a .NET struct,
and the way to do this will be to apply the StructLayout attribute 
StructLayoutAttribute(LayoutKind.Explicit)]
internal struct simpleUnion
{
    [FieldOffsetAttribute(0)]
    public char[] a;
    [FieldOffsetAttribute(0)]
    public int b;
}