我试图通过使用循环将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?
答案 0 :(得分:3)
那是因为您正在将y[x]
的LSB“复制”到bytetosend
的LSB,然后通过将bytetosend
右移一个来删除它。
我不知道为什么你需要一点一点地复制,如果你只能通过bytetosend = y[x];
一次复制整个字节,但我们假设你真的想要它。
然后你可以通过以下方式完成:
bytetosend = 0;
for (i=0; i < 8; ++i)
{
bytetosend |= y[x] & ((unsigned char)1 << i);
}