您好有关移位的快速问题
我在HEX中有一个值= new byte [] {0x56,0xAF};
这是0101 0110 1010 1111
我想要前n位,例如12
然后转移剩余的4(16-12)以得到0000 0101 0110 1010(1386 dec)
我不能把我的头缠住,并使其可扩展n位。
谢谢!
最佳答案
不久前,我对这两个函数进行了编码,第一个函数将byte []左移指定量,第二个函数向右移:
左移:
public byte[] ShiftLeft(byte[] value, int bitcount)
{
byte[] temp = new byte[value.Length];
if (bitcount >= 8)
{
Array.Copy(value, bitcount / 8, temp, 0, temp.Length - (bitcount / 8));
}
else
{
Array.Copy(value, temp, temp.Length);
}
if (bitcount % 8 != 0)
{
for (int i = 0; i < temp.Length; i++)
{
temp[i] <<= bitcount % 8;
if (i < temp.Length - 1)
{
temp[i] |= (byte)(temp[i + 1] >> 8 - bitcount % 8);
}
}
}
return temp;
}
右移:
public byte[] ShiftRight(byte[] value, int bitcount)
{
byte[] temp = new byte[value.Length];
if (bitcount >= 8)
{
Array.Copy(value, 0, temp, bitcount / 8, temp.Length - (bitcount / 8));
}
else
{
Array.Copy(value, temp, temp.Length);
}
if (bitcount % 8 != 0)
{
for (int i = temp.Length - 1; i >= 0; i--)
{
temp[i] >>= bitcount % 8;
if (i > 0)
{
temp[i] |= (byte)(temp[i - 1] << 8 - bitcount % 8);
}
}
}
return temp;
}
如果您需要进一步的解释,请对此发表评论,然后我将编辑我的帖子以进行澄清...