Неправильно работает 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);
}
→ Ссылка