Я нашел замечательный проект под названием 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? Есть ли какой-нибудь другой способ, которым я мог бы вернуть только эти биты еще полезным путь?
Я думаю о нескольких распространенных ситуациях, например:
Мой вопрос: какой тип данных / структуры / методов я должен возвращать / выставлять, чтобы облегчить работу с битами (или, по крайней мере, легче для ранее описанных ситуаций).
Задача ещё не решена.