Страница 1 из 1

Сборка нескольких отдельных байт в число

Добавлено: 08 дек 2010, 21:44
TIT0
Здравствуйте, уважаемые. У меня есть задача, необходимо собрать из нескольких байт хранящихся в массиве данных, число.
Конкретнее у меня есть массив с 3 элементами, каждый байт в этом массиве имеет 7 значимых бит(8 незначимый). Мне необходимо из этих 3х байт собрать число.
Как я делаю.
c Код:

Код: Выделить всё

long chislo;
int n;
int data_f=[1,2,3];
int main (void)
{ 
       chislo=data_f[1];  // считываю первый байт массива в число
       cchislo<<=8;       // сдвигаю на 8 бит влево, освобождаю под следующую цифру
       chnl0|=data_f[2]; // записываю след цифру массива в число
       chnl0<<=8;          // опять сдвигаю
       chnl0|=data_f[3]; // опять записываю

       printf("%d chislo",chislo);
}
Хочу узнать правильно ли я делаю?

Re: Сборка нескольких отдельных байт в число

Добавлено: 09 дек 2010, 07:35
Albor
Если бы массив был char, то есть содержал бы однобайтные данные, то нормально. А что с незначимым битом? В каждом элементе массива он "незначим", но при переносе его в результат, он будет очень даже "значим".
ЗЫ Я так понимаю, что синтаксические ошибки кода не в счёт?

Re: Сборка нескольких отдельных байт в число

Добавлено: 09 дек 2010, 08:41
TIT0
Это я что то протупил, сорри, массив data_f имеет тип char.
И да, синтаксис не в счет.
И на счет не значимого бита, я хотел спросить, как мне его в из результата вытащить?

Re: Сборка нескольких отдельных байт в число

Добавлено: 09 дек 2010, 11:12
Albor
TIT0 писал(а):И на счет не значимого бита, я хотел спросить, как мне его в из результата вытащить?
Перед операцией ИЛИ ненужный бит нужно обнулить, ну и сдвиг делать не на 8 разрядов, а на 7. Обнулить старший бит можно так

Код: Выделить всё

char a=0xFF;
char b= a & 0x7F;
То есть у числа 7F нет 1 в старшем разряде, после опервции И, её не будет и у переменной b.