如何从C++中的二进制文件中读取一位?

Mik*_*ong 0 c++ binary input

我们正在做一些关于随机数的实验.给出的数据存储在.bin文件中,根据提供程序,它存储在独立的位中,也就是说,每个位都是假设的bool随机变量.

现在我想在程序中使用这个输入,但是当bool占用1个BYTE并且int占用4个字节时,我不知道如何将它读入C++中的变量.似乎ifstream.read(s,n)也只取n作为char的数量.

有没有办法从文件中读取位数据?谢谢!

Gal*_*lik 6

如果每个字符都是8位,那么您可以像这样发现每个位的状态:

// @param bit = 0 - 7
inline bool get_bit(char c, int bit)
{
    return (c >> n) & 1;
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 5

可以从文件中读取的最小信息单位是char(8位1).要从a中提取特定位char,您可以执行以下操作:

char c = 0xa5;
int n = 2;
int bit = (c >> n) & 1;
printf("bit = %d\n", bit);
Run Code Online (Sandbox Code Playgroud)

1如果我不包括这个,那么有人会指出a char并不总是必须是8位,它取决于CHAR_BIT你的编译器定义,但在今天所有合理的平台上,a char是8位.