我有一个代表两个值的字节。 第一位表示序列号。 其余的位代表实际内容。
在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
答案 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中的性能提升,但它挽救了它的含义。