C/C++ 将字符数组视为比特流的代码
我在 char[] 数组中有一大堆二进制数据,我需要将其解释为打包的 6 位值的数组。
我可以坐下来编写一些代码来做到这一点,但我认为必须有人已经编写了一个很好的现有类或函数。
我需要的是这样的:
int get_bits(char* data, unsigned bitOffset, unsigned numBits);
所以我可以通过调用获取数据中的第 7 个 6 位字符:
const unsigned BITSIZE = 6;
char ch = static_cast<char>(get_bits(data, 7 * BITSIZE, BITSIZE));
I have a big lump of binary data in a char[] array which I need to interpret as an array of packed 6-bit values.
I could sit down and write some code to do this but I'm thinking there has to be a good extant class or function somebody has written already.
What I need is something like:
int get_bits(char* data, unsigned bitOffset, unsigned numBits);
so I could get the 7th 6-bit character in the data by calling:
const unsigned BITSIZE = 6;
char ch = static_cast<char>(get_bits(data, 7 * BITSIZE, BITSIZE));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Boost.DynamicBitset - 尝试一下。
Boost.DynamicBitset - try it.
这可能不适用于大于 8 的大小,具体取决于字节序系统。 这基本上就是 Marco 发布的内容,尽管我不完全确定他为什么一次只收集一点。
This may not work for sizes greater than 8, depending on endian system. It's basically what Marco posted, though I'm not entirely sure why he'd gather one bit at a time.
我认为以下内容可能有效。
我尚未调试或测试它,但您可以使用它作为起点。
另外,还要考虑位顺序。 您可能需要
进行更改。
根据位数组的生成方式
I think something in the line of the following might work.
I've not debugged nor tested it, but you can use it as a start point.
Also, take into account bit order. You might want to change
to
depending on how the bit array has been generated.