我试着用一个循环将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?

最佳答案

这是因为你在“复制”y[x]的LSB到bytetosend的LSB,然后通过将bytetosend向右移动一个来移除它。
我不知道为什么你需要一点一点地复制,如果你能一次复制整个字节bytetosend = y[x];,但让我们假设你真的想要它。
那么你可以通过以下方式来实现:

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

10-06 09:44