我有Byte scaleValue
,其值为3(0000.0011二进制)
现在我想在Byte Config
的帮助下设置Byte scaleValue
的BIT 3和4(缩放)(见图片),但它不起作用。
这是我的代码:
configByte = (byte) (configByte | (scaleValue << 3));
答案 0 :(得分:0)
如果configByte
是整个8位块,并且scaleValue
是要注入3/4位的值(当前位为0/1位),那么从根本上说,您需要:
configByte = (byte)(configByte | (scaleValue << 3));
然而,这假定:
configByte
中的3/4位当前为零scaleValue
中的位0/1设置(或不设置)
如果这两个假设不成立,那么你需要用...... mask:
来掩盖这个问题configByte = (byte)((configByte & 231) | ((scaleValue & 3) << 3));
& 231
删除旧值中的位3/4。 & 3
仅在新值(移位前)中强制执行位0/1
答案 1 :(得分:0)
您可以使用以下扩展方法:
public static bool GetBit(this byte data, byte position)
{
byte mask = (byte)(1 << position);
return (data & mask) != 0;
}
public static byte SetBit(this byte data, byte position, bool value)
{
byte mask = (byte)(1 << position);
if (value)
{
return (byte)(data | mask);
}
else
{
return (byte)( data & (~mask));
}
}
static void Main(string[] args)
{
byte data = 0b0000100;
if (data.GetBit(2))
{
}
data = data.SetBit(4, true);
data = data.SetBit(2, false);
}