|
0 / 0 / 0
Регистрация: 31.03.2012
Сообщений: 66
|
|
алгоритм HEX to BCD27.11.2016, 20:21. Показов 9216. Ответов 18
Метки нет (Все метки)
Здравствуйте!
объясните пошагово как преобразовать шестнадцатеричную систему в формат BCD видел сайт где производили сдвиг влево несколько раз и потом иногда прибавляли число 3. Вот мне не понятен момент до каких пор нужно сдвигать и когда прибавить число 3. спасибо!
0
|
|
| 27.11.2016, 20:21 | |
|
Ответы с готовыми решениями:
18
нужен алгоритм bin to bcd
Алгоритм шифрования DES (Входные данные в HEX) |
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 27.11.2016, 20:39 | |
|
yazymma, вам надо именно понять алгоритм?
Более-менее адекватное изложение в https://en.wikipedia.org/wiki/Double_dabble Идея алгоритма: По сути, в нём две части, выход одной - вход другой 1. Берём все биты Xi исходного числа от старшего к младшему (например, сдвигая число налево через перенос) 2. 8 раз подряд делаем для результата Y = Y*2 + Xi, причём соблюдаем при этом правила BCD-переноса (т.е. если у нас в каком-то ниббле должно получиться число от 10 до 19 - делаем из него число от 10h до 19h (т.е. прибавляем 6). При этом мы знаем, что получится число от 10 до 19 ещё до удвоения (если до удвоения в соответствующм ниббле было число от 5 до 9) - соответственно, можем вместо этого заранее прибавить 3.
0
|
|
|
0 / 0 / 0
Регистрация: 31.03.2012
Сообщений: 66
|
|
| 27.11.2016, 20:48 | |
|
о нет. если можно число 0х3B5 в двоичной 0011 1011 0101
как и куда сдвигаем и где биты проверяем. так более наглядно и количество сдвигов как определить?
0
|
|
|
0 / 0 / 0
Регистрация: 31.03.2012
Сообщений: 66
|
|
| 27.11.2016, 20:55 | |
|
сдвигаю на 4 разряда влево 0011, 1011 0101 продолжаю потому что 3 получилось
еще сдвиг 0011 1,011 0101 теперь у нас число 7( тоже меньше 10) еще сдвиг 0011 10,11 0101 теперь в левой части 11 это уже больше 10. что дальше делать?
0
|
|
|
0 / 0 / 0
Регистрация: 31.03.2012
Сообщений: 66
|
||
| 27.11.2016, 20:58 | ||
осталось понять куда 3 прибавить? к тому что в новом регистре получили ( в который сдвигаем)
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 27.11.2016, 21:44 | |
|
На 5 надо проверять _каждый_ ниббл. Т.е. если в лоб реализовать - вам понадобятся отдельные переменные для единиц, десятков, сотен и так далее.
Т.е. к примеру у вас число 1100 (я для примера взял число покороче) Начало: десятки = 0, единицы = 0. 3. Берём старший бит X3=1 е=е*2+1=1, переноса нет д=д*2+0=0, переноса нет (в примере и не будет) 2. Следующий бит X2=1 е=е*2+1=2+1=3, переноса нет д=0 1. Следующий бит X1=0 е=е*2=6 д=0 0. Следующий бит X0=0 е=е*2+1 = 12, больше 9 - переносим (2 пишем, 1 в уме) д=д*2+перенос = 1 Итого получили д=1 е=2 А теперь то же самое, но с проверкой на 5 _до_ удвоения (пишу только единицы) 3. е=0 e<5 - прибавлять не надо (e*2+X3<10 - независимо от X3); e=e*2+X3 = 1 2. e=1 e<5 - прибавлять не надо; e=e*2+X2 = 3 1. e=3 e<5 - прибавлять не надо; e=e*2+X1 = 6 0. e=6 e>=5 - прибавляем 3: e=9; e=e*2+X0 = 18 - но e - одна 16-ричная цифра, значит, перенос: e=2, перенос поднят д=д*2+перенос = 1 Итого то же самое: д=1 е=2
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
|
||||||
| 27.11.2016, 21:51 | ||||||
|
Может для начала взять простой алгоритм (если я правильно суть беседы уловил)
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
|||||||
| 27.11.2016, 21:58 | |||||||
static inline uint8_t nex_bcd (uint8_t nex){return ((nex%10)|((nex/10)<<4));}; это для времени ну или так - чтоб печатать
0
|
|||||||
|
0 / 0 / 0
Регистрация: 31.03.2012
Сообщений: 66
|
|||
| 27.11.2016, 22:04 | |||
x893- Спасибо за алгоритм!! пойду распакую , хотя кратко и талантливо!
ну если stm32f4 это проглотит то впихну, а если нет )) то буду знать как это сделать спасибо еще раз всем .тему можно закрывать.
0
|
|||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 27.11.2016, 22:30 | |
|
yazymma, я там отредактировал - чтобы вариацию с >=5 и +=3 пояснить.
А вообще лучше было разбираться в этом алгоритме на примере реализации для проца с BCD-коррекцией сложения (команда DAA на Intel). Эта команда после сложения двух двоично-десятичных чисел корректирует результат, чтобы он был корректным двоично-десятичным числом. Соответственно, преобразование становится очень красивым: пихаем очередной бит в перенос, потом ADC аккумулятора с самим собой, потом DAA - и так 8 раз. Всё.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
|
|
| 28.11.2016, 14:57 | |
|
Все что предназначено на вывод человеку, не требует высокой скорости. Так что даже на авр можно использовать флоат и принтф.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 2,309
|
||||||
| 28.11.2016, 17:14 | ||||||
|
На avr я делал банальным вычитанием.
Пример такой: пусть есть число 16 бит.
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
||||||
| 29.11.2016, 20:13 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
|
||
| 30.11.2016, 08:09 | ||
Хм... Что это за нигическое число 0x30?
0
|
||
|
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 432
|
|
| 30.11.2016, 08:31 | |
|
Bytt
0
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
||
| 30.11.2016, 08:34 | ||
0x35, 0x36, 0x37, 0x38, 0x39. Пока писал, успели ответить. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
0
|
||
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
||||||
| 30.11.2016, 13:28 | ||||||
|
Лучше так и писать, чтобы код легче читать было:
0
|
||||||
| 30.11.2016, 13:28 | |
|
Помогаю со студенческими работами здесь
19
Если HEX одного файла заменить на HEX другого, то изменится ли файл и будет ли работоспособным? Прошивка микроконтроллера Hex файлом или Hex загрузчик Как преобразовать hex в ascii (HEX редактор)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|