这个是我自己写的一个类,用Marshal来实现快还是自己组织各个字段成字节数组快?
另外为什么单独Marshal.Sizeof(LedConflict)是2,但是实际在CrossError类中ledconflict[]却占用了96个字节。
[StructLayout(LayoutKind.Sequential)]
    public class LedConflict
    {
        private byte ledone;
        private byte ledtwo;        public LedConflict()
        {
            ledone = 0xff;
            ledtwo = 0xff;
        }        public byte LedOne
        {
            get { return ledone; }
            set
            {
                if (value >= 0 && value < 24)
                {
                    ledone = value;
                }
            }
        }        public byte LedTwo
        {
            get { return ledtwo; }
            set
            {
                if (value >= 0 && value < TCStatic.MAXLED)
                {
                    ledtwo = value;
                }
            }
        }    }    [StructLayout(LayoutKind.Sequential)]
    public class CrossError
    {
        private bool powerdown;
        [MarshalAs(UnmanagedType.ByValArray,SizeConst=24)]
        private byte[] status;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
        private LedConflict[] ledconflict;        public CrossError()
        {
            powerdown = false;
            status = new byte[TCStatic.MAXLED];
            ledconflict = new LedConflict[TCStatic.MAXLED];
            for (int i = 0; i < TCStatic.MAXLED; i++)
                ledconflict[i] = new LedConflict();
        }        public int Size
        {
            get { return Marshal.SizeOf(this); }
        }        public bool Powerdown
        {
            get { return powerdown; }
            set { powerdown = value; }
        }        public byte[] Status
        {
            get { return status; }
            set { status = value; }
        }        public LedConflict[] LedConflict
        {
            get { return ledconflict; }
            set { ledconflict = value; }
        }        public byte[] CopytoBytes()
        {
            byte[] bytes = new byte[this.Size];
            IntPtr p = Marshal.AllocHGlobal(this.Size);
            Marshal.StructureToPtr(this, p, false);
            Marshal.Copy(p, bytes, 0, this.Size);
            Marshal.FreeHGlobal(p);
            return bytes;
        }        public void FromBytes(byte[] bytes)
        {
            IntPtr p = Marshal.AllocHGlobal(bytes.Length);
            Marshal.Copy(bytes, 0, p, bytes.Length);
            Marshal.PtrToStructure(p, this);
            Marshal.FreeHGlobal(p);
        }
    }