объединение переменных с использованием побитовых операторов - PullRequest
0 голосов
/ 23 февраля 2012

Мне нужна функция, которая принимает четыре беззнаковых переменных в качестве параметров и объединяет их в беззнаковое целое. Первая переменная char является первым байтом int, второй char является вторым байтом и так далее. Вот то, что я имею до сих пор, это не работает должным образом, и я не могу понять, почему после того, как возиться с ним и гуглить в течение нескольких часов.

uint32_t combineChar(unsigned char one, unsigned char two, unsigned char three, unsigned char four){

uint32_t com;

com = (uint32_t)one;

com = com << 8 | (uint32_t)two;

com = com << 8 | (uint32_t)three;

com = com << 8 | (uint32_t)four;

return com;       

}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Проверьте приоритетность символов «<<» и «|» операторы. </p>

uint32_t combineChar(unsigned char one, unsigned char two
                    , unsigned char three, unsigned char four){

   return one | (two << 8) | (three << 16) | (four <<24);

}
0 голосов
/ 23 февраля 2012

Ваш код зависит от endianess.Первый байт (из uint32_t) в некоторых системах самый левый, а в некоторых системах самый правильный, поэтому вы можете хранить байты не так, как вам нужно.

(На самом деле, если выхотите просто uint32_t, это нормально. Проблемы начинаются, когда вы объединяете его с char[4] или подобным материалом)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...