如何实现类似于c语言中的共用体
c语言代码:
/*
* 64位浮点数转换共同体
*/
typedef union
{
double f;
#pragma pack(1)
struct
{
float f1;
float f2;
}ff;
#pragma pack()
unsigned char cf[8];
} tagToFloat;
我转成这样了:
/// <summary>
/// 64位浮点数转换共同体
/// </summary>
[System.Runtime.InteropServices.StructLayoutAttribute(LayoutKind.Explicit, Size = 64)]
class UnionFloat
{
[System.Runtime.InteropServices.FieldOffset(0)]
public double d;
[System.Runtime.InteropServices.FieldOffset(0)]
public float f1;
[System.Runtime.InteropServices.FieldOffset(32)]
public float f2;
[System.Runtime.InteropServices.FieldOffset(0)]
public char[] c;
}
总是提示这个错误:
因为它在 0 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠。
我应该怎么改?
在字符数组前加了这一句:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)],
也不对。