i have implemented c++ unions in c#, just to verify that i´m understandig it. But it seems that i understand nothing. I expected some times a completly different output. My Code:
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication2
{
[StructLayout(LayoutKind.Explicit)]
class union
{
[FieldOffset(0)]
public double d;
[FieldOffset(0)]
public float f0;
[FieldOffset(4)]
public float f1;
[FieldOffset(0)]
public int i0;
[FieldOffset(4)]
public int i1;
[FieldOffset(0)]
public short s0;
[FieldOffset(2)]
public short s1;
[FieldOffset(4)]
public short s2;
[FieldOffset(6)]
public short s3;
}
class Program
{
static void Main(string[] args)
{
union su = new union();
su.f0 = 19.012012F;
su.f1 = 3.14159265F;
Console.WriteLine(su.d);
Console.WriteLine(su.i0);
Console.WriteLine(su.i1);
Console.WriteLine(su.s0);
Console.WriteLine(su.s1);
Console.WriteLine(su.s2);
Console.WriteLine(su.s3);
Console.ReadLine();
}
}
}
And my output is:
- 50,1238786690385
- 1100486810
- 1078530011
- 6298
- 16792
- 4059
- 16457
For example, i thought s0 would be 30209 and not 6298. Can someone explain how it works?