C#, биты в байты и наоборот

Дерябин17 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
17.04.2008

Нужен сниппет под .Net, который:

1. Переводит int'ы в массивы битов (скажем, Boolean []) заданной длины, например: 5 --> 000101

2. Переводит массив массивов битов в массив байтов (массив 8-битных массивов). То есть, два массива по 4 бита пакуем в один байт, первый массив из 6 битов засовываем в первый байт, второй распределяем между первым и вторым байтами: два бита в конец первого, три в начало второго. И так далее.

3. Конвертит массив байтов обратно в массив массивов битов по заданной последовательности длин массивов. Последовательность задается массивом интов. Например, имеем на входе массив {01011101, 11011101, 01110010} и последовательность {4, 5, 3, 12}, на выходе получаем {0101, 11011, 101, 110101110010}.

4. Всё это конвертим обратно в инты.

Желательно использовать как можно меньше высокоуровневых библиотечных функций. Чем ближе к Си, тем лучше.