Некоторое время назад я закодированы эти две функции, первая сдвигает байт [] определенное количество битов слева, второй делает то же самое направо:
сдвиг влево:
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;
}
Если вам нужна дополнительная объяснение, пожалуйста, комментарий по этому вопросу, я затем редактировать свой пост для уточнения ...
спасибо, мне понравился этот подход, проблема заключается в том, что конструктор BitArray изменил порядок Endian на каждый байт, значение которого было ошибочным после завершения метода, id должен отменить порядок битов на каждый байт до создания экземпляра битового массива с помощью byes – Bobby