2017-04-10 4 views
0

を使用してバイトに7ビットを置く私は、ループを使用して、バイト(ビット単位)に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はありますか?

答えて

3

y[x]のLSBをbytetosendのLSBに「コピー」してから、bytetosendを右に1つ移動して削除するからです。

bytetosend = y[x];で一度にバイト全体をコピーできるのであれば、なぜビット単位でコピーする必要があるのか​​分かりませんが、実際にそれが必要だとしましょう。私はリフトをシフトすることによって、これを修正することができます

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

次に、あなたがでそれを行うことができますか? bytetosendの? –

+0

@SalmaKHaled実際には、左にシフトすると、 'bytetosend'のMSBで' y [x] 'のLSBになります。私の編集されたポストを参照してください。 –

+0

お勧め '(unsigned char)(1 << i)' ==>'((unsigned char)1 << i) ' –