![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
blackdevil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Привет форум!
Есть у меня программа одна которая работает с очень хитрым девайсом...для работы надо просто читать/писать в открытый ком порт...НО загвоздка в том что это надо делать на битовом уровне... Итак, у прибора есть ID номер. В моем случае это 022360 (как я понял из техзадания это будет просто число 22360). Так вот мне нужно этот номер представить в двоичном виде и записать в порт следующим образом (а19-а0 - ID номер в двоичном формате): №байта Порядок бит 7 6 5 4 3 2 1 0 1 1 1 а19 а18 а17 а16 а15 а14 2 0 а13 а12 а11 а10 а9 а8 а7 3 0 а6 а5 а4 а3 а2 а1 а0 Но это еще не все....прибор мне выдает однобайтовый ответ в котором четвертый БИТ скажет мне о том установлено ли соединение или нет...Затем я опять посылаю ему какое-то число (уже постоянное, можно использовать float) и он возвращает мне нужное значение !ВНИМАНИЕ! в котором нужно ПОМЕНЯТЬ МЕСТАМИ биты чтобы получилось стандартное число в формате float... ВОПРОС: что лучше использовать чтобы максимально просто работать на битовом уровне (менять порядок бит в произвольном порядке) а потом конвертировать значение обратно в число? Union из float и битового поля подходит для битовых операций но нужна большая гибкость...возможность переставлять биты местами...Подскажите что использовать и если сможете маленькие примерчики как это делается...Не могу ничего подходящего найти... Всем спасибо за внимание! |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Думаю, тебе будет достаточно ф-циональности std::bitset.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
blackdevil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Спасибо archimed7592 я и не сомневался что именно ты мне ответишь )) Сейчас погуглю на эту тему...
Это сообщение отредактировал(а) blackdevil - 16.12.2007, 19:59 |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
К слову, union - это плохо. Особенно в данном контексте.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
bitset штука хорошая, но не решает все проблемы, представленные здесь.
union + битовые поля имхо вполне хорошее решение (именно для таких целей) вот пример:
без union такое можно сделать только приведением типа, что имхо гораздо хуже. битовые поля позволяют также менять биты местами (обычным алгоритмом swap через временную переменну; можно показать класс использованием ^ ![]() Все это хозяйство инкапсулируем в класс, и с union будет работать только реализация класса. Чем это плохо? |
|||
|
||||
blackdevil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Спасибо огромное за пример! Все понял кроме строки с return потому что просто не помню битовые операции...я когда хотел использовать union не думал сделать именно так...интересная идея....
блин, мнение эксперта настораживает... |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
В принципе, т.к. ты работаешь с аппаратурой, то можешь не заморачиваться ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 17.12.2007, 11:12 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
blackdevil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
MAKCim это ассемблер? ))
Ребят подскажите самое начало...мне надо число 22360 представить в двоичном виде а потом уже буду загонять в bitset со структурой как в 1-ом посте. Как число представить в двоичном виде? Думаю использовать union. Просто пользование и union и bitset одновременно некрасиво как-то... Это сообщение отредактировал(а) blackdevil - 20.12.2007, 01:34 |
|||
|
||||
Cycle |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.12.2007 Репутация: нет Всего: 3 |
|
|||
|
||||
TeAnton |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
А мне кажется, что ^ | & ~ >> << хватит выше крыши.
|
|||
|
||||
TeAnton |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Последнюю строчку правильно вот так записать:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |