私は python-bitstring という素晴らしいプロジェクトを見つけました。C++ への移植はかなりの状況で非常に役立つと思います (確かに私のいくつかのプロジェクトでは)。
read/write/patch bytes メソッドを移植している間、まったく問題はありませんでした。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
‾ ‾ ‾ ‾ ‾
1 バイトより小さい値は返せない (または返せるか?) ため、実際に 5 ビットを読み取ったとしても 8 が返されます。しかし、14 ビットを読み取って 1 をスキップするとどうなるでしょうか。これらのビットのみをより便利な方法で返すことができる他の方法はありますか?
たとえば、いくつかの一般的な状況について考えています。
- 最初の 14 ビットが「010101.....」と一致するかどうか
- 2 つのマッチ "00011010....." をスキップした後、次の 13 ビットを実行します。
- 最初の 5 ビットを読み取り、int/float に変換します
- 5 をスキップした後に 7 ビットを読み取り、それらを int/float に変換します
私の質問は、ビットの操作を簡単にするために (または少なくとも前述の状況で簡単に)、どのタイプのデータ/構造/メソッドを返す/公開する必要があるかということです。