2016-10-09 7 views
0

센서에서 바이트 배열을 검색하려고합니다. 검색된 바이트 배열에는 어떤 데이터가 배열에 있는지 알려주는 바이트 마스크 xx-xx-xx-xx가 있습니다.연산자 '&'는 'byte []'및 'byte []'유형의 피연산자에 적용 할 수 없습니다.

센서 마스크 :

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, 예를 들어, 해당 데이터 1, 데이터 2, data_7, data_9, data_11 응답하여 배열 될 것이다 내게 말한다. 저는 bitwise-and를 사용하여 Windows의 계산기 응용 프로그램에서 이것을 알고 있습니다. 16 진수 모드에서 543을 입력하고 "And"버튼을 클릭 한 다음 센서 마스크 (1, 2, 4, 8, 10, ...)를 입력하십시오. 결과가 센서 마스크 (1, 2, 4, 8, 10, ...)와 같으면이 데이터가 포함됩니다. 그러나 C#에서이를 달성하는 방법을 모르겠습니다.

이 내 이상적이지만 나에게 오류를 준 : 운영자 '는 &'형식의 피연산자에 적용 할 수 없습니다 '바이트 []'와 '바이트 []'

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; 
} 

사람이 좀 이상을 제공 할 수 있습니다. 나쁜 영어

쉽게 수행하고 작동하는 BitArray 클래스를 사용할 수 있습니다
+1

배열에서 bitwise & -operator를 사용하려고합니다. 너는 그렇게 할 수 없다. 배열의 각 요소를 반복하고 요소 자체에서 연산자를 사용해야합니다. 나는. 'byte []'가 아닌'byte'에 & 연산자를 사용하십시오. –

+0

예, 알고 있지만, 제 경우에는 값이 543과 100처럼 바이트가 저장할 수있는 값보다 크므로 배열에 저장해야합니다. 그것은 전체 배열 대신 각 바이트에 비트 & & - 연산자를 사용하면 올바른 것인가? – user1728585

+0

예, 비트 연산이 - 단어가 말한대로 - 수행하지 않고 비트 단위로 수행했기 때문입니다. '&'는'+'가 아닙니다! –

답변

2

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; 
} 
3

모든 오류 메시지 "운영자 '&'형식의 피연산자에 적용 할 수 없습니다 '바이트 []'에 미리 감사하고 죄송합니다 및 'byte []' "는 array 유형의 변수에 대해 비트 AND 연산자를 사용할 수 없다는 것을 의미합니다. 단일 정수 또는 부호없는 정수 변수에만 사용할 수 있으며 두 정수 또는 부호없는 정수를 비트 ANDED로 함께 사용할 수 있습니다.

전체 배열에 대해 수행하려는 작업은 동일한 크기의 다른 배열을 만들고 첫 번째 배열의 각 변수와 두 번째 배열의 각 변수를 해당 위치에 AND 배열 1의 첫 번째 변수는 배열 2의 첫 번째 변수와 비트 ANDED됩니다. 희망이 도움이됩니다.

+0

죄송합니다. 내가 원하는 것은 2 개의 배열에 연산자 '&'를 적용하는 것입니다. 그래서 당신은 제 3의 배열을 만들라고 말하고 있습니다, 첫 번째 두 배열 중 하나를 기반으로합니다, 맞습니까? – user1728585

+0

아마도 가능합니다. 당신이하고 싶은 것에 따라. 제 3의 배열을 만들라고 말하지는 않습니다. 난 그냥 비트 논리 AND 두 변수 중 하나를 부호없는 정수 또는 정수 및 바람직하게 비트 너비 같은 너비가 있어야 말하는. 전체 배열에는 많은 개별 변수가 포함되어 있기 때문에 논리적 AND가 될 수 없으며이 오류가 발생합니다. 비트 논리 AND는 두 변수의 비트에만 적용됩니다. 예를 들어 비트 논리 AND int x와 int y를 사용할 수 있지만 비트 논리 AND와 전체 배열을 다른 전체 배열과 함께 사용할 수는 없습니다. –

+0

이 코드는 다음과 같습니다. –