上面那个结帖了我这里回复把,如果一定要56,必须手动指定后面2个数组大小
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct StructX
{
//4+4+4+4+4+4+4+4+8+1+8+8=57
public int a1;//32位4字节
public int b;//32位4字节
public int c;//32位4字节
public int d;//32位4字节
public float e;//单精浮点4字节
public float f;//单精浮点4字节
public float g;//单精浮点4字节
public uint h;//无符号int 4字节
public ulong i;//无符号long 64位 8字节
public byte j;//1字节
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] //你想56,除非显式指定数组大小,而且只能动这里,你其他类型基本都是偶数,只有这个byte[]才能拼凑个奇数出来
public byte[] k;
//这里下面这个可以通过上面的算出来size
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.U4)]
public UInt32[] l;
};