这里原C里面的结构体代码:
typedef struct _USER_TYPE_STRUCT
{
UINT8  Power:              4;     /*User Privilege */
UINT8  TempFlg:            1;     /*Reserve*/
UINT8  DuressFlg:          1;     /*Reserve*/
UINT8  Reserve:            2;     /*Reserve*/
} USER_TYPE;
用sizeof(USER_TYPE)测试结果为1;
下面是我自己的转换成C#的代码:
    [StructLayout(LayoutKind.Explicit)]
    public struct USER_TYPE
{
        
        [FieldOffset(0)]
byte  Power;     /*User Privilege */
         [FieldOffset(4)]
byte  TempFlg;     /*Reserve*/
         [FieldOffset(5)]
byte  DuressFlg;     /*Reserve*/
         [FieldOffset(6)]
byte  Reserve;//            2;     /*Reserve*/
        

用Marshal.SizeOf测试结果为7,明显不对啊。
求真相!!!!谢谢!C#Cstruct

解决方案 »

  1.   

    我记得fieldoffset是以字节为单位
      

  2.   

    关于union 封送,msdn上有详细的解释
      

  3.   

    不一定要用fileoffset
    只要你能通过C#控制这个结构的尺寸,就可以调用
      

  4.   

    C#里貌似是这样[Flags]
    enum _USER_TYPE_ENUM
    {
        Power=0x1,           
        TempFlg=0x10,
        DuressFlg=0x20,
        Reserve=0x40          
    }struct USER_TYPE
    {
        _USER_TYPE_ENUM userType;
    }
      

  5.   

    错了,应该是[Flags]
    enum _USER_TYPE_ENUM
    {
        Power=0xF,           
        TempFlg=0x10,
        DuressFlg=0x20,
        Reserve=0xC0          
    }
     
    struct USER_TYPE
    {
        _USER_TYPE_ENUM userType;
    }