В последнее время я столкнулся с интересной проблемой:
Допустим, у меня есть массив байтов (точнее, uint8_t) длиной не менее одного. Теперь мне нужна функция, которая получит подпоследовательность битов из этого массива, начиная с бита X (индекс на основе нуля включительно) и имеющий длину L, и вернет его как uint32_t. Если L меньше 32, оставшиеся старшие биты должны быть равны нулю.
Хотя это не очень трудно решить, мои нынешние мысли о том, как это сделать, кажутся мне несколько обременительными. Я имею в виду таблицу всех возможных масок для данного байта (начните с бита 0-7, берите 1-8 бит), а затем создайте номер один байт за раз, используя эту таблицу.
Может кто-нибудь придумать более приятное решение? Обратите внимание, что я не могу использовать Boost или STL для этого - и нет, это не домашняя работа, это проблема, с которой я сталкиваюсь на работе, и мы не используем Boost или STL в коде, где эта штука идет. Вы можете предположить, что: 0
Один пример правильного ввода / вывода:
массив: 00110011 1010 1010 11110011 01 101100
подпоследовательность: X = 12 (индекс на основе нуля), L = 14
в результате uint32_t = 00000000 00000000 00 101011 11001101