2011-03-09 84 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[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!"); 
     } 
    }