Неправильно работает XOR функция
День добрый. Сделал функцию для XOR двух массивов байтов. Когда проверил в C# Interactive, оказалось что не работает.
private byte[] xorBytes(byte[] first, byte[] second)
{
if(first == null || second == null)
return null;
byte[] result = new byte[Math.Max(first.Length, second.Length)];
for (int i = 0; i < result.Length; i++)
{
byte f;
byte s;
if (first.Length >= i)
{
f = 0;
s = second[i];
}
else if (second.Length >= i)
{
f = first[i];
s = 0;
}
else
{
f = first[i];
s = second[i];
}
result[i] = (byte)(f^s);
}
return result;
}
Скормил ей {0,1,2} и {4,7,2,8}, должно было получится {4,6,0,8}, но получилось {4,7,2,8}. Кто разбирается, помогите пожалуйста.
Ответы (1 шт):
Автор решения: Regent
→ Ссылка
Условия в if-ах некорректны. Например, для i = 0 с указанными массивами: first.Length >= i - true (3 >= 0), в итоге вместо first[0] возьмётся 0. И так для всех итераций
Можно переписать условия так:
for (int i = 0; i < result.Length; i++)
{
byte f = i < first.Length ? first[i] : (byte)0;
byte s = i < second.Length ? second[i] : (byte)0;
result[i] = (byte)(f ^ s);
}