使用循环将 7 位放入一个字节

Putting 7 bits to a byte using loop

我正在尝试通过循环将 7 位(逐位)放入一个字节中:

unsigned char bytetosend;
unsigned char y[] = { 0x7f };
int x = 0;
int i;

int main()
{
    for (i = 0; i < 8; i++)
    {
        bytetosend = (y[x] & 0x01);
        bytetosend >>= 1;
        y[x] >>= 1;
    }
    printf("the out is %x", bytetosend);
}

但是为什么输出是0?

那是因为你是 "copying" y[x] 的 LSB 到 bytetosend 的 LSB 然后你通过将 bytetosend 右移一位来删除它。

我不知道为什么你需要一点一点地复制,如果你可以一次复制整个字节 bytetosend = y[x]; 但让我们假设你真的想要它。

那么你可以通过:

bytetosend = 0;
for (i=0; i < 8; ++i)
{
    bytetosend |= y[x] & ((unsigned char)1 << i);
}