如何在c#中表示结构中的位

时间:2014-08-25 23:57:28

标签: c# byte bits

我有一个代表两个值的字节。         第一位表示序列号。         其余的位代表实际内容。

在C中,我可以通过以下方式轻松解析:

typedef struct 
{
    byte seqNumber : 1;
    byte content   : 7;
}
MyPacket;

然后我可以轻松地输入MyPacket:

char* inputByte = "U"; // binary 01010101
MyPacket * myPacket = (MyPacket*)inputByte;

然后     myPacket-> seqNumber = 1     myPacket-> content = 42

我怎样才能在C#中做同样的事情?

谢谢 KAB

1 个答案:

答案 0 :(得分:0)

我只会使用属性。为两个部分创建getter和setter,修改真实表示中的相应位。

class myPacket {
  public byte packed = 0;
  public int seqNumber {
    get { return value >> 7; }
    set { packed = value << 7 | packed & ~(1 << 7); } 
  }
  public int content {
    get { return value & ~(1 << 7); }
    set { packed = packed & (1 << 7) | value & ~(1 << 7); } 
  }
}

C#喜欢保持其类型简单,所以我打赌这是你得到的最接近的。显然,它并没有为你提供C中的性能提升,但它挽救了它的含义。