运算符“&”不能应用于 'byte[]' 和 'byte[]' 类型的操作数

Operator '&' cannot be applied to operands of type 'byte[]' and 'byte[]'

我正在尝试处理从传感器检索的字节数组。 在检索到的字节数组中,将有一个字节掩码 xx-xx-xx-xx,它告诉我哪些数据将在数组中。

传感器掩码:

DATA_1 0x00000001
DATA_2 0x00000002
DATA_3 0x00000004
DATA_4 0x00000008
DATA_5 0x00000010
DATA_6 0x00000020
DATA_7 0x00000040
DATA_8 0x00000080
DATA_9 0x00000100
DATA_10 0x00000200
DATA_11 0x00000400

例如,这个字节掩码 43-05-00-00 告诉我 data_1、data_2、data_7、data_9、data_11 将在响应数组中。我通过在 Windows 的计算器应用程序中使用按位和来了解这一点:在十六进制模式下,键入 543,单击 "And" 按钮,然后键入传感器掩码(1、2、4、8、10,。 ..).如果结果与传感器掩码 (1, 2, 4, 8, 10,...) 相同,则包含此数据。但是我不知道如何在C#中实现这个。

这是我的理想,但它给了我错误:运算符“&”不能应用于 'byte[]' 和 'byte[]'

类型的操作数
int[] sensorMaskList = new int[length] {1, 2, 4, 8,... };
internal List<int> GetSelectedData(byte[] byteMask)
{
    List<int> lstDataIndex = new List<int>();
    for (int i = 0; i < sensorMaskList.Length; i++)
    {
        byte[] mask = BitConverter.GetBytes(sensorMaskList[i]);
        if (mask & byteMask == mask)
           lstDataIndex.Add(i);
     }
     return lstDataIndex;
}

谁能给我一些理想。提前致谢,抱歉英语不好

您可以使用BitArrayclass轻松执行和操作

int[] sensorMaskList = new int[length] {1, 2, 4, 8,... };
internal List<int> GetSelectedData(byte[] byteMask)
{
    BitArray byteMaskBits = new BitArray(byteMask);
    List<int> lstDataIndex = new List<int>();
    for (int i = 0; i < sensorMaskList.Length; i++)
    {
        byte[] mask = BitConverter.GetBytes(sensorMaskList[i]);
        BitArray maskBits = new BitArray(mask);
        if(maskBits.And(byteMaskBits) == maskBits)
        {
            lstDataIndex.Add(i);
        }
     }
     return lstDataIndex;
}

所有错误消息"Operator '&' cannot be applied to operands of type 'byte[]' and 'byte[]'" 的意思是您不能对数组类型的变量使用按位与运算符。您只能在单个整数或无符号整数变量上使用它们,或者两个整数或无符号整数可以按位 ANDED 在一起。

如果你想对整个数组做这件事,你可能想要做的是组成另一个大小相等的数组,并将第一个数组中的每个变量与第二个数组中的每个变量放在相应的位置,这样数组 1 中的第一个变量将与数组 2 中的第一个变量按位与运算,依此类推。希望这有帮助。