我對使用這種方法完成的工作感到困惑。它似乎試圖將字節分解爲半字節,並用其他字節的半字節重新組裝半字節以形成新字節,然後返回一個新的字節序列。但是,我沒有想到,你可以使用模數和減法和除法從一個字節中取出半字節,也不需要用簡單的乘法和加法重新組合它們。請幫忙弄清楚這個C#方法在做什麼?
我想更好地理解這個方法的工作原理以及它在做什麼,所以我可以得到一些關於它的評論,然後看看它是否可以被轉換,以使用更多更多的標準方法來琢磨字節和如果可能的話,甚至可以利用.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();
}
只是一個音符 - 除以4與'>> 2'相同,除以16與'>> 4'相同。乘以它們是同樣的左移。 – Oded 2010-06-26 19:05:14
Gnome - 在前4遍(前四個字節)中,'i <4'爲真。所以,它似乎放棄了前4個結果。 – Oded 2010-06-26 19:22:28
切換一個單獨維護的相位變量而不是僅僅切換我的mod是第一個跡象,這段代碼的其餘部分可能會讓事情變得困難。 – 2010-06-26 19:22:33