关于c#实现c++一样的位寻址
最近在学习c#,但是遇到一个union的问题,之前有一段代码是c++的,如下,怎样在c#中实现这种功能呢?望高人指点啊,不甚感激。
struct stBitType
{
unsigned int Bit0 :1;
unsigned int Bit1 :1;
unsigned int Bit2 :1;
unsigned int Bit3 :1;
unsigned int Bit4 :1;
unsigned int Bit5 :1;
unsigned int Bit6 :1;
unsigned int Bit7 :1;
};
union unBitConvert
{
struct stBitType BitValue;
unsigned char ucValue;
};
unsigned char modMult02(unsigned char x)
{
union unBitConvert Input,Output;
Input.ucValue=x;
Output.BitValue.Bit0=Input.BitValue.Bit7;
Output.BitValue.Bit7=Input.BitValue.Bit6;
Output.BitValue.Bit6=Input.BitValue.Bit5;
Output.BitValue.Bit5=Input.BitValue.Bit4;
Output.BitValue.Bit2=Input.BitValue.Bit1;
Output.BitValue.Bit1=Input.BitValue.Bit0^Input.BitValue.Bit7;
Output.BitValue.Bit3=Input.BitValue.Bit2^Input.BitValue.Bit7;
Output.BitValue.Bit4=Input.BitValue.Bit3^Input.BitValue.Bit7;
return Output.ucValue;
}
------解决方案--------------------
------解决方案--------------------
下面代码就是完美模拟C++中的union结构,改写了unBitConvert,其长度和C++中的完全相同,功能完全一样,
验证长度可以用sizeof函数输出查看。
C# code
public struct unBitConvert
{
int innerValue;
public byte ucValue
{
get { return (byte)(innerValue & 0xff); }
set { innerValue = value; }
}
public bool Bit0
{
get
{
return (innerValue & 1) != 0;
}
set
{
if (value)
{
innerValue |= 1;
}
else
{
innerValue &= ~1;
}
}
}
public bool Bit1
{
get
{
return (innerValue & 2) != 0;
}
set
{
if (value)
{
innerValue |= 2;
}
else
{
innerValue &= ~2;
}
}
}
public bool Bit2
{
get
{
return (innerValue & 4) != 0;
}
set
{
if (value)
{
innerValue |= 4;
}
else
{
innerValue &= ~4;
}
}
}
public bool Bit3
{
get
{
return (innerValue & 8) != 0;
}
set
{
if (value)
{
innerValue |= 8;
}
else
{
innerValue &= ~8;
}
}
}
public bool Bit4
{
get
{
return (innerValue & 16) != 0;
}
set
{
if (value)
{
innerValue |= 16;
}
else
{
innerValue &= ~16;
}
}
}
public bool Bit5
{
get
{
return (innerValue & 32) != 0;
}
set
{
if (value)
{
innerValue |= 32;
}
else
{
innerValue &= ~32;
}
}
}
public bool Bit6
{
get
{
return (in