从ifstream读取任意数量的位

时间:2014-01-20 13:45:19

标签: c++ bit

我目前正在使用SWFFiles。 在SWF标题ist RECT中,它由5个字段构成。第一个是5比特字段(nBits - >用于指定其他字段的长度。

Rectangle record

应该看起来像一个方法,它接受一个参数(读取了多少位)并从ifstream读取它?

SWF File format specification

谢谢,S。

1 个答案:

答案 0 :(得分:0)

C ++文件流是面向字节的。你不能从它们读取特定的位数(当然,除非数字是8的倍数)。

要获得5位,您必须读取整个字节,然后屏蔽掉感兴趣的8位。如果该字节还包含另一个字段,则必须将其保留以供以后使用。如果你足够通用,你可以编写自己的“比特流”类,在内部缓冲未使用的字节部分。

获取字节的低位(最低有效)5位:

unsigned char bits = byte & 0x1F; // note 0x1F = binary 00011111

获得高阶(最高有效)5位:

unsigned char bits = byte >> 3; // shift off the unused 3 low bits