带C#的Ror字节数组

时间:2015-05-25 17:02:52

标签: c# arrays byte byte-shifting

有没有办法将整个byte[]按特定金额计算? 我已经做了一些研究,找到了Rol byte[]的解决方案:

public static byte[] ROL_ByteArray(byte[] arr, int nShift)
{
    //Performs bitwise circular shift of 'arr' by 'nShift' bits to the left
    //RETURN:
    //      = Result
    byte[] resArr = new byte[arr.Length];

    if(arr.Length > 0)
    {
        int nByteShift = nShift / (sizeof(byte) * 8);   //Adjusted after @dasblinkenlight's correction
        int nBitShift = nShift % (sizeof(byte) * 8);

        if (nByteShift >= arr.Length)
            nByteShift %= arr.Length;

        int s = arr.Length - 1;
        int d = s - nByteShift;

        for (int nCnt = 0; nCnt < arr.Length; nCnt++, d--, s--)
        {
            while (d < 0)
                d += arr.Length;
            while (s < 0)
                s += arr.Length;

            byte byteS = arr[s];

            resArr[d] |= (byte)(byteS << nBitShift);
            resArr[d > 0 ? d - 1 : resArr.Length - 1] |= (byte)(byteS >> (sizeof(byte) * 8 - nBitShift));


        }
    }

    return resArr;
}

此代码的作者可在此处找到:Is there a function to do circular bitshift for a byte array in C#?

知道我怎么能做同样的事情,但是在byte[]执行Ror操作而不是Rol操作?

1 个答案:

答案 0 :(得分:1)

static byte[] ROR_ByteArray(byte[] arr, int nShift)
{
  return ROL_ByteArray(arr, arr.Length*8-nShift);
}