0

我发现了一个名为 python-bitstring 的精彩项目,我相信 C++ 端口在某些情况下会非常有用(在我的某些项目中肯定如此)。

在移植读/写/补丁字节方法时,我根本没有遇到任何问题;就像将 Python 翻译成 C++ 一样简单。

无论如何,现在我开始使用 bits 方法,但我不确定如何表达该功能。

例如,假设我想创建一个方法,如:

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.....”
  • 跳过 2 个匹配“00011010 .....”后执行接下来的 13 位
  • 读取前 5 位并将它们转换为 int/float
  • 跳过 5 位后读取 7 位并将它们转换为 int/float

我的问题是:我应该返回/公开哪种类型的数据/结构/方法,以使处理位更容易(或者至少对于前面描述的情况更容易)。

4

0 回答 0