2011-03-09 5 views
1

2 바이트 배열과 마스킹을 비교하고 싶습니다. 그래서 데이터 및 DataTemplate을 가지고마스킹과 바이트 배열 비교

byte[] data = new byte[] { 0x3b, 0xfe, 0x18, 0x00, 0x00, 0x80, 0x31, 0xfe, 
          0x45, 0x45, 0x73, 0x74, 0x75, 0x49, 0x44, 0x20, 
          0x76, 0x65, 0x72, 0x20, 0x31, 0x2e, 0x30, 0xa8 }; 

byte[] dataTemplate = new byte[] { 0x66, 0xfe, 0x18, 0x00, 0x00, 0x80, 0x31, 0xfe, 
            0x45, 0x45, 0x73, 0x74, 0x75, 0x49, 0x44, 0x20, 
            0x76, 0x65, 0x72, 0x20, 0x31, 0x2e, 0x30, 0xa8 }; 

을 그리고 마스크가 :

byte[] mask = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
          0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 }; 

모든 0x00이 chanaged 및 0xFF 캔트 할 수있는 것을 바이트를. 그래서 data와 dataTemplate을 비교하면 data[0]은 하나의 배열에 0x3b이 될 수 있고 다른 배열에는 뭔가가있을 수 있습니다. 그러나 data[9]은 둘 다 같아야합니다. 지금 나는 이렇게하고있다 :

List<byte> maskedDataList = new List<byte>(); 

for (int i = 0; i < data.Length; i++) 
{ 
    byte maskedByte = (byte)((dataTemplate[i] & mask[i])); 
    atrList.Add(maskedByte); 
} 

for (int i = 0; i < data.Length; i++) 
{ 
    if ((data[i] & maskedDataList[i]) != MaskedDataList[i]) 
    { 
     throw new Exception("arrays dont match!"); 
    } 
} 

그러나 이것은 과잉으로 보인다. 아마이 일을하는 더 좋은 방법이 있을까요?

감사합니다.

답변

3
for (int i = 0; i < data.Length; i++) 
    { 
     if (mask[i] == 0xFF && data[i] != dataTemplate[i]) { 
      throw new Exception("arrays dont match!"); 
     } 
    }