将字节转换为位数组?C

将字节转换为位数组?C,c,bit-manipulation,C,Bit Manipulation,我想在读取二进制文件字节的时候,然后将该字节的位存储到整数数组中。类似地,我想将1和0(其中8个)的整数数组作为字节写入二进制文件?如果您有一个字节数组: unsigned char bytes[10]; 要将其更改为一个位数组: unsigned char bits[80]; 假设每个字节有8位,请尝试以下方法: int i; for (i=0; i<sizeof(bytes)*8; i++) { bits[i] = ((1 << (i % 8)) & (

我想在读取二进制文件字节的时候,然后将该字节的位存储到整数数组中。类似地,我想将1和0(其中8个)的整数数组作为字节写入二进制文件?

如果您有一个字节数组:

unsigned char bytes[10];
要将其更改为一个位数组:

unsigned char bits[80];
假设每个字节有8位,请尝试以下方法:

int i;
for (i=0; i<sizeof(bytes)*8; i++) {
    bits[i] = ((1 << (i % 8)) & (bytes[i/8])) >> (i % 8);
}
然后输入所需的字节:

bytes[i/8]
然后我们执行逻辑AND以清除除所需位之外的所有位

(1 << (i % 8)) & (bytes[i/8])
我们首先清除字节数组,因为我们将一次将每个字节设置为一位

然后,我们来讨论这个问题:

bits[i]
将其移动到其位置:

bits[i] << (i % 8)

位[i]i/O基本上不是逐位工作的。据我所知,您可以使用函数read和缓冲区大小1逐字节读取。您可以使用位掩码1并沿着输入爬行,但将单个位转换为有效的32位并不能真正节省空间。您可以尝试使用字符数组来存储8位的组,并使用位移位和掩码来访问单个位。您听说过位移位和按位操作吗?到目前为止您尝试过什么?如果这是关于C的,那么让我们看看一些代码,以及关于什么不起作用的具体问题。因此,这不是代码编写或家庭作业服务。
bits[i]
bits[i] << (i % 8)