Нужен совет для API для чтения битов

Я нашел замечательный проект под названием python-bitstring, и я считаю, что порт C ++ может быть очень полезным в некоторых ситуациях (наверняка, в некоторых моих проектах).

При переносе байтовых методов чтения / записи / исправления у меня не возникло никаких проблем; это было так же просто, как перевод Python на C ++.

Во всяком случае, теперь я перехожу к методам битов, и я не совсем уверен, как выразить эту функциональность.

Например, допустим, я хочу создать такой метод:

readBits(uint64_t n_bits_to_read, uint64_t n_bits_to_skip = 0) {...}

Давайте предположим, что ради этого примера this->data это кусок памяти (void *) хранит все данные, из которых я читаю.

Таким образом, метод получит количество бит для чтения и необязательное количество бит для пропуска.

this->readBits(5, 2);

Таким образом, я буду читать биты из позиции 2 в позицию 6 включительно (для этого примера забудем маленький / большой порядок байтов).

0 1 1 0 1 0 1 1
‾ ‾ ‾ ‾ ‾

Я не могу вернуть ничего меньше байта (или могу ли я?), Поэтому, даже если я на самом деле читаю 5 бит, я все равно буду возвращать 8. Но что если я прочту 14 бит и пропущу 1? Есть ли какой-нибудь другой способ, которым я мог бы вернуть только эти биты еще полезным путь?

Я думаю о нескольких распространенных ситуациях, например:

  • Соответствуют ли первые 14 битов «010101 …..»
  • Сделайте следующие 13 битов после пропуска 2 совпадения «00011010 …..»
  • Прочитайте первые 5 бит и конвертируйте их в int / float
  • Прочитайте 7 бит после пропуска 5 и конвертируйте их в int / float

Мой вопрос: какой тип данных / структуры / методов я должен возвращать / выставлять, чтобы облегчить работу с битами (или, по крайней мере, легче для ранее описанных ситуаций).

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]