我想比较 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
中的所有字节都可以更改,而 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!");
}
}
但这看起来有点矫枉过正。也许有更好的方法来做到这一点?
谢谢!
最佳答案
for (int i = 0; i < data.Length; i++ )
{
if (mask[i] == 0xFF && data[i] != dataTemplate[i]) {
throw new Exception("arrays dont match!");
}
}
关于c# - 将字节数组与掩码进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251355/