Я получил неподписанный символ массив байт, как:C: Вычисление серии бит натянутой на несколько байт
unsigned char[20] = {0xff, 0x1a, 0x70, 0xa9, ...}
теперь я хочу, чтобы выполнять вычисления над й последовательными битами этого массива (с x > 8
, например, x = 15
). В частности, я хочу выполнить мажоритарное голосование каждые 15 бит, которое возвращает один бит. Впоследствии возвращаемые одиночные биты снова преобразуются в байты без знака.
Я уже реализовал алгоритм mostVoting. Я также реализован наивный алгоритм для всей задачи, которая работает следующим образом:
- Преобразовать массив байтов в битовый массив (также неподписанные символ [], проведение нулей и единиц)
- петлю на битовый массив и передавать каждую серию x бит в функцию большинства голосов
- Соберите результаты большинства голосов также в бит-массиве (unsigned char [])
- Заверните этот бит-массив и используйте побитовые операции для построения байтов из каждой серии из 8 биты.
Для меня это кажется интуитивным, но громоздким в то же время.
Вы видите какие-либо возможности для оптимизации или вы даже можете дать алгоритм скольжения?
С наилучшими пожеланиями, P.
Не могли бы вы объяснить, почему вы не просто используйте 16-битные блоки, имеющие 1 неиспользуемый бит заполнения? Фактически, я ожидаю, что это то, что изначально предназначалось, и результат был сохранен в этом 16-м бите. –