Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2012, 09:43   #1
vaan.sk
Пользователь
 
Аватар для vaan.sk
 
Регистрация: 10.03.2010
Сообщений: 30
По умолчанию Вытащить число из 14 последовательных разрядов

Есть 3 байта. Искомое мне число находится в 4 младших битах первого байта, целом байте следующего и двум старшим битам последнего байта:

(----++++) (++++++++) (++------)

+ - нужные биты

Каждый байт представлен как buf[1], следующий байт buf[2]...
и объявлен как BYTE* buff;

Требуется вытащить оттуда десятичное число, которое там хранится. Мои попытки:

Код:
unsigned short num;
num= unsigned short(( buff[1] << 10 | buff[2] ) | buff[3]);
Идея: сдвигаю на 10 разрядов, вставляю следующие и преобразую, однако проблема видимо в том, что старшие разряды байта b[1] никуда не убираются
vaan.sk вне форума Ответить с цитированием
Старый 05.12.2012, 09:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на первый байт наложите через логический "AND" маску 0x0f перед сдвигом..

я не знаю C, предполагаю, что это может выглядеть примерно так:
Код:
num= unsigned short(( ( buff[1] && 0x0f) << 10 | buff[2] ) | buff[3]);
UPDATE не совсем понял Вашу логику, а почему Buff[2] и buff[3] не сдвигаете?
Кроме того, разве нумерация в массиве не от нуля идёт?!

Последний раз редактировалось Serge_Bliznykov; 05.12.2012 в 09:56.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.12.2012, 10:03   #3
vaan.sk
Пользователь
 
Аватар для vaan.sk
 
Регистрация: 10.03.2010
Сообщений: 30
По умолчанию

сделал:

Код:
unsigned short count = unsigned short(buff[1])<<10 | unsigned short(buff[2])<<2	| unsigned short(buff[3])>>6;
vaan.sk вне форума Ответить с цитированием
Старый 05.12.2012, 10:04   #4
vaan.sk
Пользователь
 
Аватар для vaan.sk
 
Регистрация: 10.03.2010
Сообщений: 30
По умолчанию

PS у меня другая нумерация, просто тут для наглядности написал так)
vaan.sk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение разрядов IP адреса. denis76560 Общие вопросы Delphi 8 02.08.2012 19:00
разделение десятичных разрядов SAMOUCHKA Общие вопросы C/C++ 3 29.02.2012 22:06
определить кол-во разрядов Регина56 Помощь студентам 5 07.06.2011 16:28
Мантисса 6 разрядов mastar Помощь студентам 2 26.03.2011 18:10
Edit с разделением числовых разрядов XPAiN Компоненты Delphi 7 16.04.2008 12:51