我有一个关于位屏蔽的问题,我完全不熟悉它。
在应用程序中,目前有一种方法是获取地址的byte [],并从中确定哪些警报(bool)是true
的{{1}}。
我希望扭转此局面。我会有一个属性列表(bool),根据哪些属性,我会创建一个地址。
这样做有一个简单的内置方法吗?
非常感谢任何帮助。下面我附上了我的代码,用于获取地址中启用了哪些标志。
false
答案 0 :(得分:0)
听起来好像是试图将一组OR-ed转换回枚举数组。您可以使用BitArray
类以及一些数学运算来完成此操作,如下所示:
void Main()
{
var value = Sample.A | Sample.B;
var bits = new BitArray(new[] { (int)value });
var enumValues = Enumerable.Range(0, bits.Length).Select(n =>
((Sample)(bits[n] ? Math.Pow(2, n) : 0)));
}
enum Sample
{
A = 0x1,
B = 0x2,
C = 0x4
}