C#中的位掩码,从枚举转换为字节[]

时间:2017-02-07 16:36:55

标签: c# bitmask bit-masks

我有一个关于位屏蔽的问题,我完全不熟悉它。 在应用程序中,目前有一种方法是获取地址的byte [],并从中确定哪些警报(bool)是true的{​​{1}}。

我希望扭转此局面。我会有一个属性列表(bool),根据哪些属性,我会创建一个地址。

这样做有一个简单的内置方法吗?

非常感谢任何帮助。下面我附上了我的代码,用于获取地址中启用了哪些标志。

false

1 个答案:

答案 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
}