Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Нужно зеркально отобразить байт |
Автор: Serenum 22.7.2004, 08:56 |
Дело в следующем, данные из последовательного порта записываются в память наоборот слева направо. Нужно написать программу, или может функция есть специальная, чтобы перевести число в нормальный вид. Помогите, я на С только начинаю... ![]() |
Автор: chipset 22.7.2004, 10:22 |
Делай маски в шестнацетиричном формате затем побитовой функцией & разделяй на биты и | собирай.. Может кто знает более правильный и красивый способ.. |
Автор: maxim1000 22.7.2004, 10:37 | ||
только я не проверял ![]() |
Автор: Alex101 22.7.2004, 11:39 | ||
Проверить не на чем. Не уверен в скобках, но работать должно. |
Автор: Guest 22.7.2004, 11:49 |
chipset maxim1000 Ребят, можете поподробнее объяснить, что вы предлагаете. Т. е, извлечено число из порта, присвоено переменной , и дальше словами алгоритм, мне так понятнее будет. И по русски плиз, я в программерскую феню еще не до конца въезжаю. |
Автор: Serenum 22.7.2004, 11:56 |
Alex101 А почему в цикле четыре прохода? |
Автор: Alex101 22.7.2004, 12:03 | ||
Больше не надо. Если надо перевернуть 8-и битное число, то идем до середины и меняем симметричные биты. P.S. Проверьте, работает? (Просто самому интересно, сейчас C нет, а в нашем языке нет операций сдвига). |
Автор: <Spawn> 22.7.2004, 12:14 |
можешь функцию из Winsock исользовать, а именно ntohl, если я не правильно помню(если не то, то сморти htonl) |
Автор: maxim1000 22.7.2004, 12:15 | ||
аналогия: есть стопка книг алгоритм такой: 1. взять верхнюю книгу и положить справа (там где должна быть перевернутая стопка) 2. повторить (1) столько раз, сколько книг в стопке получится перевернутая стопка книг... |
Автор: chipset 22.7.2004, 12:19 | ||
Выводит ноль ![]() |
Автор: Guest 22.7.2004, 12:48 | ||
<Spawn> Мне под DOS надо... maxim1000
Это все понятно, но поближе к Си, пжста? |
Автор: oleg1973 22.7.2004, 12:54 |
кароче я так понимаю проблему имеем байт 11110000 нада из него сделать 00001111 делаем _asm { mov al,наш байт rol al,4 } получим че хотели |
Автор: Hroft 22.7.2004, 13:03 | ||
Криво, быть может, но вроде работает. Прямой подход, без премудростей. |
Автор: Alex101 22.7.2004, 15:17 | ||
Это будет работать только для твоего примера. Команда ROL осуществляет сдвиг влево + переносит старший бит в младший. А тут надо зеркально отобразить, например: 10110011->11001101 |
Автор: maxim1000 22.7.2004, 15:25 | ||||||||||
если человек сказал, что он на С только начинает, это еще не значит, что до этого он программировал на ассемблере ![]()
фрагмент
просто проверяет младший бит x, и если он 1, то добавляет его к result
сдвигает result влево на один бит (освобождает место для следующего)
сдвигает x вправо на один бит (делает младшим следующий) вообще полезно было бы запустить все это в отладочнике и пройтись пошаговым выполнением... |
Автор: Alex101 22.7.2004, 15:26 | ||
А r чему равно перед присваиванием? Да, int надо unsigned (В этом примере нормально должно быть по-любому 5F, а так - может отрицательное число получиться) Добавлено @ 15:34 Поставьте дополнительные скобки. |
Автор: Girder 22.7.2004, 16:08 | ||
|
Автор: oleg1973 22.7.2004, 20:02 |
Alex101 а ну да чета я ступил ![]() |