Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Протокол общения. Помогите с битами-байтами |
Автор: chiffa 27.4.2017, 15:26 |
Всем добрый день. Есть протокол общения с один девейсом через комп порт, с описании сказано, что в пакете пакет состоит из блоков, в блоках передаются байты. в описании одного из блоков: Размер блока: 1байт Состоит из: - Номера канала 0-2 бит - пакет 3 бит - 4-5бит - тип 6-7 биты и как пример приведено 80 - байт. Собственно вопрос, как этот байт разложить на биты, что понять структуру блока? Заранее всем спасибо! P.S. понимаю, что 80 в БИН это 10000000 и как бы оно соответствует, но в описании сказано, что в примере (байт 80), номер канала 0. то есть в моем понимании должно быть не 10, а 00... |
Автор: azesmcar 27.4.2017, 15:48 | ||||||||
через битовые операции. делаешь операцию AND (&) с нужно тебе маской и получаешь результат. скажем тебе нужно два первых бита числа
делаешь
на C++ будет выглядеть вот так.
Добавлено через 5 минут и 12 секунд нет
используй обычный калькулятор, там все есть. |
Автор: azesmcar 27.4.2017, 16:14 |
а, в HEX? ну так и пиши 0x80. ну если тебе нужно получить первые два бита, то первые два бита 1, после все нули ну и в результате ты получишь значение первых двух битов (а остальное все нули). |
Автор: chiffa 27.4.2017, 17:14 |
то есть делаю на калькуляторе: 10000000 (0x80) AND 11000000 (2 бита) ------------- 10000000 - результат получает канал 1, а по примеру должен быть.... |
Автор: vpf 27.4.2017, 17:25 |
у вас в перовом посте ошибка, биты считаются справа налево 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 0 0x80 это и есть канало 0 с типом 2 (биты 7,6 = 10) |
Автор: chiffa 27.4.2017, 17:36 |
блин, точно с права налево.... но, есть пример с каналом 1, байт 0x41 получается: 1000001 - 0x41 AND 11000000 (2 бита) ------------- 1000000 - результат такой же.... |
Автор: azesmcar 27.4.2017, 17:39 |
если тебе нужно получить последние два бита, то и маска должна быть соответствующей. я всего лишь пример показал. |
Автор: chiffa 27.4.2017, 18:00 |
Фсе, до меня вроде дошло. Всем огромное спасибо за помощь и разъяснения ![]() |
Автор: vpf 27.4.2017, 18:02 |
вот так получается: 01000001 - 0x41 AND 11000000 - 0x30 маска (на 2 бита) 01000000 = 0x40 результат |