2017-04-10 49 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

推薦'(無符號字符)(1 << i)' ==>'((無符號字符)1 << i)' –