我发现了一个名为 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
我的问题是:我应该返回/公开哪种类型的数据/结构/方法,以使处理位更容易(或者至少对于前面描述的情况更容易)。