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!");
}
}
但這看起來像是矯枉過正。也許有更好的方法做到這一點?
謝謝!