解决方案 »

  1.   

    结构体:// 时间定义
    typedef struct _ZLNET_DEVTIME
    {
    DWORD second  :6; // 秒 1-60
    DWORD minute  :6; // 分 1-60
    DWORD hour  :5; // 时 1-24
    DWORD day  :5; // 日 1-31
    DWORD month  :4; // 月 1-12
    DWORD year  :6; // 年 2000-2063

      

  2.   

    那个结构占一个int型(32位)的空间,
    前6位是秒,后面6位是分,之后分别是时天月年  
    加起来刚好32位struct MyBitField {
     private uint data;
     
     public byte aa { get { return data & 0x03; } set { data = (data & ~ 0x03) | (value & 0x03); } }
     public ushort bb { get { return (data >> 3) & 0x0FFF; } set { data = (data & ~ 0x00007FFC) | ((value & 0x0FFF) << 3; } }
     public ushort bb { get { return (data >> 15) & 0x0FFF; } set { data = (data & ~ 0x3FFF8000) | ((value & 0x0FFF) << 15; } }
    }http://www.codeproject.com/Questions/276153/help-for-bit-field-in-csharp
      

  3.   

    C/C++中,WORD占2个字节,DWORD占4个字节。这个结构体定义本身并不是规范,可以把年月日时分秒全部用byte变量(8位无符号整数,占1字节)。或者使用C# 的标准时间变量DateTime。
    或者如6楼一样使用位操作进行转换。
      

  4.   

    6楼的方法不错,冒号后面的数字是指这个元素占几个bit位,DWORD是32位的,把那些数字加起来正好是32位。
      

  5.   


    public struct _ZLNET_DEVTIME
    {
        int   second;            // 秒    1-60       
        int   minute;            // 分    1-60       
        int   hour  ;            // 时    1-24       
        int   day    ;            // 日    1-31       
        int   month ;            // 月    1-12       
        int   year     ;            // 年    2000-2063   

    :号后面的数字表示他要使用的二进制位数, 在C#里不用Care
      

  6.   

    写个类字段一样,加个方法,移位运算后或起来组成一个 32bit 的整数返回。int getDWORD(){
       return (year & 0x6 << 26) |  (month & 4 << 22 ) ... ...  //全部|起来,组成一个 DWORD类型整数。
    }