здравствуйте
изучаю avr .
по уарт принимается десятичное число 94833 и записывается в некой переменной r1[5]={0x39,0x34,0x38,0x33,0x33};
нужно чтобы после приема в другой переменной r2[5];записался HEX(17271) значение данного числа r2[5]={0x31,0x37,0x32,0x37,0x31};
как это можно организовать автоматический?
нужно переписать DEC в HEX
- Реклама
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: нужно переписать DEC в HEX
Проще некуда: входную строковую переменную преобразовать в число. Скажем, uint32_t (смотря какие там диапазоны могут быть). Автоматом получили шестнадцатеричную запись. Теперь формируем строку с шестнадцатеричным представлением, поочередно анализируя квартеты (0..9 преобразуем в '0'..'9', а 10..15 — в 'a'..'f').
Читай K&R, и будет тебе счастье!
Только сдается мне, что ТЗ поставлено неправильно!
Читай K&R, и будет тебе счастье!
Только сдается мне, что ТЗ поставлено неправильно!
Re: нужно переписать DEC в HEX
Что-то типа такого:
uint32_t r = (r1[0]-'0')*10000+(r1[1]-'0')*1000+(r1[2]-'0')*100+(r1[3]-'0')*10+(r1[4]-'0');
r2[0] = r/65536+'0';
r2[1] = r%65536/4096+'0';
r2[2] = r%4096/256+'0';
r2[3] = r%256/16+'0';
r2[4] = r%16+'0';
PS. Есть косяк с преобразованием цифр более девяти в буквы. Исправлять не буду, лениво, предлагаю аффтору вопроса самому это сделать. Это легко и просто.
PPS. По-хорошему, надо ещё входные данные проверять на валидность, в случае невалидных данных материться ERRORом, благо формат выходных данных позволяет.
Добавлено after 7 minutes 48 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3936136#p3936136"]Читай K&R, и будет тебе счастье![/uquote]Да чо уж там, пусть сразу Кнута читает. Все три тома.
uint32_t r = (r1[0]-'0')*10000+(r1[1]-'0')*1000+(r1[2]-'0')*100+(r1[3]-'0')*10+(r1[4]-'0');
r2[0] = r/65536+'0';
r2[1] = r%65536/4096+'0';
r2[2] = r%4096/256+'0';
r2[3] = r%256/16+'0';
r2[4] = r%16+'0';
PS. Есть косяк с преобразованием цифр более девяти в буквы. Исправлять не буду, лениво, предлагаю аффтору вопроса самому это сделать. Это легко и просто.
PPS. По-хорошему, надо ещё входные данные проверять на валидность, в случае невалидных данных материться ERRORом, благо формат выходных данных позволяет.
Добавлено after 7 minutes 48 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3936136#p3936136"]Читай K&R, и будет тебе счастье![/uquote]Да чо уж там, пусть сразу Кнута читает. Все три тома.
Последний раз редактировалось mickbell Пт дек 04, 2020 22:16:21, всего редактировалось 4 раза.
И хрюкотали зелюки,
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: нужно переписать DEC в HEX
[uquote="mickbell",url="/forum/viewtopic.php?p=3936148#p3936148"]Да чо уж там, пусть сразу Кнута читает. Все три тома.[/uquote]
На мой взгляд, единственная полезная книга Кнута — "Все про ТеХ". А "Искусство программирования" — херня какая-то абстрактная в вакууме!
На мой взгляд, единственная полезная книга Кнута — "Все про ТеХ". А "Искусство программирования" — херня какая-то абстрактная в вакууме!
Re: нужно переписать DEC в HEX
Оно считается кладезью алгоритмов. А алгоритмы как раз и должны быть описаны абстрактной хернёй в вакууме.
И хрюкотали зелюки,
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
- Реклама
Re: нужно переписать DEC в HEX
большое спасибо.
начинаю изучать предложенный материал и отпишусь по итогам.
начинаю изучать предложенный материал и отпишусь по итогам.
Re: нужно переписать DEC в HEX
Перегрузите страницу и перечитайте моё сообщение, по ходу поправляю очепятки.
Ну и пара слов о том, как буквы делать. Смотрите таблицу ASCII-кодов с кодами 0x3A-0x3F, там знаки препинания, надо сделать их замену на буквы. Или сразу по ходу заполнения выходного массива: если r2 не более 9, то прибавлять 0x30 или '0', а если больше, то прибавлять 0x37 или '7'.
Ну и пара слов о том, как буквы делать. Смотрите таблицу ASCII-кодов с кодами 0x3A-0x3F, там знаки препинания, надо сделать их замену на буквы. Или сразу по ходу заполнения выходного массива: если r2 не более 9, то прибавлять 0x30 или '0', а если больше, то прибавлять 0x37 или '7'.
И хрюкотали зелюки,
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.


