побитовые операции в Си, получающие двоичные числа в символ - PullRequest
0 голосов
/ 10 февраля 2012

Я получаю 2 байта двоичной информации через Serial в C.

Я получаю их в виде символа.

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

Ответы [ 5 ]

4 голосов
/ 10 февраля 2012

Просто OR их вместе?

x = (b1 << 8) | b2;

Убедитесь, что они не подписаны или разыгрываются соответствующим образом (смещение подписанного материала неприятно).

1 голос
/ 10 февраля 2012

Для начала было бы лучше получить их в виде без знака , чтобы у вас не было проблем с расширением знака и т. П.

Если вы хотите объединить их,Вы можете использовать что-то вроде:

int val = ch1; val = val << 8 | ch2;

или:

int val = ch2; val = val << 8 | ch1;

в зависимости от порядкового номера вашей системы и предполагая, что ваша система имеет восьмибитовый тип char.

1 голос
/ 10 февраля 2012

используйте unsigned char, чтобы избежать проблем с расширением знака.

val16 = char1 * 256 + char2;
1 голос
/ 10 февраля 2012

Вы можете использовать что-то вроде этого:

int my_int=char1;
myint<<=8;
myint|=char2;

Это предполагает, что char1 содержит самый старший байт.В противном случае переключите 1 и 2.

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

, если MSB (старший значащий байт) стоит первым:

unsigned char array[2];
...
int bla;
bla = array[1] | (array[0] << 8);

, если LSB (младший значащий байт) стоит первым:

bla = array[0] | (array[1] << 8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...