|
|
|
chiffa |
|
|||
Опытный Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Всем добрый день. Есть протокол общения с один девейсом через комп порт, с описании сказано, что в пакете пакет состоит из блоков, в блоках передаются байты. в описании одного из блоков:
Размер блока: 1байт Состоит из: - Номера канала 0-2 бит - пакет 3 бит - 4-5бит - тип 6-7 биты и как пример приведено 80 - байт. Собственно вопрос, как этот байт разложить на биты, что понять структуру блока? Заранее всем спасибо! P.S. понимаю, что 80 в БИН это 10000000 и как бы оно соответствует, но в описании сказано, что в примере (байт 80), номер канала 0. то есть в моем понимании должно быть не 10, а 00... Это сообщение отредактировал(а) chiffa - 27.4.2017, 15:43 |
|||
|
||||
azesmcar |
|
||||||||
uploading... Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 1 Всего: 211 |
через битовые операции. делаешь операцию AND (&) с нужно тебе маской и получаешь результат. скажем тебе нужно два первых бита числа
делаешь
на C++ будет выглядеть вот так.
Добавлено через 5 минут и 12 секунд нет
используй обычный калькулятор, там все есть. |
||||||||
|
|||||||||
chiffa |
|
|||
Опытный Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
||||
|
||||
azesmcar |
|
|||
uploading... Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 1 Всего: 211 |
а, в HEX? ну так и пиши 0x80. ну если тебе нужно получить первые два бита, то первые два бита 1, после все нули ну и в результате ты получишь значение первых двух битов (а остальное все нули). |
|||
|
||||
chiffa |
|
|||
Опытный Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
то есть делаю на калькуляторе:
10000000 (0x80) AND 11000000 (2 бита) ------------- 10000000 - результат получает канал 1, а по примеру должен быть.... |
|||
|
||||
vpf |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 119 Регистрация: 14.11.2016 Где: Moscow Репутация: нет Всего: нет |
у вас в перовом посте ошибка,
биты считаются справа налево 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 0 0x80 это и есть канало 0 с типом 2 (биты 7,6 = 10) |
|||
|
||||
chiffa |
|
|||
Опытный Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
блин, точно с права налево....
но, есть пример с каналом 1, байт 0x41 получается: 1000001 - 0x41 AND 11000000 (2 бита) ------------- 1000000 - результат такой же.... |
|||
|
||||
azesmcar |
|
|||
uploading... Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 1 Всего: 211 |
если тебе нужно получить последние два бита, то и маска должна быть соответствующей. я всего лишь пример показал.
|
|||
|
||||
chiffa |
|
|||
Опытный Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Фсе, до меня вроде дошло. Всем огромное спасибо за помощь и разъяснения
|
|||
|
||||
vpf |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 119 Регистрация: 14.11.2016 Где: Moscow Репутация: нет Всего: нет |
вот так получается:
01000001 - 0x41 AND 11000000 - 0x30 маска (на 2 бита) 01000000 = 0x40 результат Это сообщение отредактировал(а) vpf - 27.4.2017, 18:04 |
|||
|
||||
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |