私はそれを理解していることを確認するためだけに、c# で c++ ユニオンを実装しました。しかし、私は何も理解していないようです。私は時々完全に異なる出力を期待していました。私のコード:
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();
}
}
}
そして私の出力は次のとおりです。
- 50,1238786690385
- 1100486810
- 1078530011
- 6298
- 16792
- 4059
- 16457
たとえば、s0 は 6298 ではなく 30209 になると思いました。