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!");
}
}
그러나 이것은 과잉으로 보인다. 아마이 일을하는 더 좋은 방법이 있을까요?
감사합니다.