Я немного сбит с толку относительно того, что достигается этим методом.Кажется, что он пытается разбить байты на кусочки и собрать кусочки с кусочками из других байтов, чтобы сформировать новые байты, а затем вернуть новую последовательность байтов.
Однако я не думал, что вы могли бы взять клевыиз байта, используя модуль и вычитание и деление, и не собирать их с помощью простого умножения и сложения.
Я хочу лучше понять, как работает этот метод и что он делает, поэтому я могу получить некоторые комментарии по немуа затем посмотреть, можно ли его преобразовать, чтобы придать ему больше смысла, используя более стандартные методы пощипывания байтов, и даже по возможности использовать преимущества .Net 4.0.
private static byte[] Process(byte[] bytes)
{
Queue<byte> newBytes = new Queue<byte>();
int phase = 0;
byte nibble1 = 0;
byte nibble2 = 0;
byte nibble3 = 0;
int length = bytes.Length-1;
for (int i = 0; i < length; i++)
{
switch (phase)
{
case 0:
nibble1 = (byte)((bytes[i] - (bytes[i] % 4)) / 4);
nibble2 = (byte)(byte[i] % 4);
nibble3 = 0;
break;
case 1:
nibble2 = (byte)((nibble2 * 4) + (bytes[i] - (bytes[i] % 16))/16);
nibble3 = (byte)(bytes[i] % 16);
if (i < 4)
{
newBytes.Clear();
newBytes.Enqueue((byte)((16 * nibble1) + nibble2));
}
else
newBytes.Enqueue((byte)((16 * nibble1) + nibble2));
break;
case 2:
nibble1 = nibble3;
nibble2 = (byte)((bytes[i] - (bytes[i] % 4)) / 4);
nibble3 = (byte)(bytes[i] % 4);
newBytes.Enqueue((byte)((16 * nibble1) + nibble2));
break;
case 3:
nibble1 = (byte)((nibble3 * 4) + (bytes[i] - (bytes[i] % 16))/16);
nibble2 = (byte)(bytes[i] % 16);
newBytes.Enqueue((byte)((16 * nibble1) + nibble2));
break;
}
phase = (phase + 1) % 4;
}
return newBytes.ToArray();
}