使用循环将 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);
}
我正在尝试通过循环将 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);
}