2016-04-29 2 views
1

Так что я пытался сбрасывать 2 байта из массива, который у меня есть, иногда я получаю хорошие значения, но не все время. Итак, вот пример.bithifting 2 байта в c из массива

char buffer[2]; //current character buffer to store the bytes 
    unsigned int number; //the unsigned int to store values 

    number = buffer[0] << 8 | buffer[1]; //bitshifting 
    printf("%02x ", number); 

Я, кажется, получаю это в некоторых случаях.

ffffffbc // the bc seems to be correct however the f's are not 

ответ

0

Это происходит потому, что char был повышен до целого, с его знаковым битом, вам нужно преобразовать unsigned значения перед продвижением сделано. Таким образом, number = buffer[0] << 8 | buffer[1]; должно быть

number = (unsigned char)buffer[0] << 8U | (unsigned char)buffer[1]; 
Смежные вопросы