нужно переписать DEC в HEX

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
ickatel
Открыл глаза
Сообщения: 43
Зарегистрирован: Вт июн 11, 2019 17:08:25

нужно переписать DEC в HEX

Сообщение ickatel »

здравствуйте
изучаю avr .
по уарт принимается десятичное число 94833 и записывается в некой переменной r1[5]={0x39,0x34,0x38,0x33,0x33};
нужно чтобы после приема в другой переменной r2[5];записался HEX(17271) значение данного числа r2[5]={0x31,0x37,0x32,0x37,0x31};
как это можно организовать автоматический?
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: нужно переписать DEC в HEX

Сообщение Eddy_Em »

Проще некуда: входную строковую переменную преобразовать в число. Скажем, uint32_t (смотря какие там диапазоны могут быть). Автоматом получили шестнадцатеричную запись. Теперь формируем строку с шестнадцатеричным представлением, поочередно анализируя квартеты (0..9 преобразуем в '0'..'9', а 10..15 — в 'a'..'f').
Читай K&R, и будет тебе счастье!

Только сдается мне, что ТЗ поставлено неправильно!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16478
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: нужно переписать DEC в HEX

Сообщение mickbell »

Что-то типа такого:
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.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: нужно переписать DEC в HEX

Сообщение Eddy_Em »

[uquote="mickbell",url="/forum/viewtopic.php?p=3936148#p3936148"]Да чо уж там, пусть сразу Кнута читает. Все три тома.[/uquote]
На мой взгляд, единственная полезная книга Кнута — "Все про ТеХ". А "Искусство программирования" — херня какая-то абстрактная в вакууме!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16478
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: нужно переписать DEC в HEX

Сообщение mickbell »

Оно считается кладезью алгоритмов. А алгоритмы как раз и должны быть описаны абстрактной хернёй в вакууме.
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
Реклама
ickatel
Открыл глаза
Сообщения: 43
Зарегистрирован: Вт июн 11, 2019 17:08:25

Re: нужно переписать DEC в HEX

Сообщение ickatel »

большое спасибо.
начинаю изучать предложенный материал и отпишусь по итогам.
Реклама
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16478
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: нужно переписать DEC в HEX

Сообщение mickbell »

Перегрузите страницу и перечитайте моё сообщение, по ходу поправляю очепятки.
Ну и пара слов о том, как буквы делать. Смотрите таблицу ASCII-кодов с кодами 0x3A-0x3F, там знаки препинания, надо сделать их замену на буквы. Или сразу по ходу заполнения выходного массива: если r2 не более 9, то прибавлять 0x30 или '0', а если больше, то прибавлять 0x37 или '7'.
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
Ответить

Вернуться в «Практика»