在C中带位域的结构体怎么转换成C#的结构体,如下面的结构体
struct STU
{
INT8U  a : 4;
INT8U b : 4;
INT16U c;
INT16U  d : 4;
INT16U  e : 12;
}

解决方案 »

  1.   

    [Flags]
        public enum Permission
        {
            View = 1,
            Create = 2,
            Edit = 4,
            Delete = 8,
            All = View | Create | Edit | Delete
        }
      

  2.   

    http://www.cnblogs.com/cntom/archive/2011/08/17/2143046.html
      

  3.   

    自己写了一个类来实现了,贴出来大家给点意见
    [StructLayout(LayoutKind.Explicit,Size=5)]
        class STU
        {
            [FieldOffset(0)]
            byte _value1=0;        [FieldOffset(1)]
            UInt16 _value2=0;        [FieldOffset(3)]
            UInt16 _value3=0;        public int a
            {
                set { _value1 = Convert.ToByte((_value1 & 0xF0) | (value & 0x0F)); }
                get { return (_value1 & 0x0F); }
            }        public int b
            {
                set { _value1 = Convert.ToByte((_value1 & 0x0F) | ((value & 0x0F) << 4)); }
                get { return ((_value1 & 0xF0) >> 4); }
            }        public int c
            {
                set { _value2 = Convert.ToUInt16(value); }
                get { return _value2; }
            }
            public int d
            {
                set { _value3 = Convert.ToUInt16((_value3 & 0xFFF0) | (value & 0x000F)); }
                get { return (_value3 & 0x000F); }
            }        public int e
            {
                set { _value3 = Convert.ToUInt16((_value3 & 0x000F) | ((value & 0x0FFF) << 4)); }
                get { return ((_value3 & 0xFFF0) >> 4); }
            }
        }