C#求结构体字节大小,结果比真实结果大1是怎么回事,有什么解决方案吗

C#求结构体字节大小,结果比真实结果大1是怎么回事,有什么解决方案吗
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct StructX
    {
        public int a1;                 
        public int b;                    
        public int c;                   
        public int d;                      
        public float e;                
        public float f;               
        public float g;            
        public uint h;
        public ulong i;                   
        public byte j;               
        public byte[] k;
        public uint[] l;
    };
int size = Marshal.SizeOf(typeof(StructX));//运行结果为57,,正确结果应该为56

上面那个结帖了我这里回复把,如果一定要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;
};


img


是56啊,没毛病