Сёха 0 29 мая, 2013 Опубликовано 29 мая, 2013 (изменено) · Жалоба Здравствуйте! Делаю вольтметр от 0 до 5В. Результат измерения АЦП МК представляется двумя байтами. Например 5В - это 0х03 и 0хFF. Я "складываю" их в переменную int, умножаю на цену деления 49 и получаю С3СF, это около 50127. Отбрасывая "7", остаётся значение для вывода на индикатор. Алгоритм преобразования я написал - простой перебор. Из переменной short int 0x03FF в результате я получаю int 0x050127. Затем сдвигом выделяю нужные разряды и вывожу на индикатор. Однако мой алгоритм работает очень медленно. Посоветуйте как правильно организовать преобразование шестнадцатиричного значение в десятичное. Спасибо. Изменено 29 мая, 2013 пользователем Сергей Владимирович Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 30 мая, 2013 Опубликовано 30 мая, 2013 · Жалоба посмотрите исходники bin2bcd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 1 июня, 2013 Опубликовано 1 июня, 2013 · Жалоба Посоветуйте как правильно организовать преобразование шестнадцатиричного значение в десятичное. char b[5]; short i=0; do { b[i]=v%10; v/=10; i++; } while (i<5); v - исходное неотрицательное число, b - результат, цифры - b[0] младшая, b[4] старшая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 22 августа, 2013 Опубликовано 22 августа, 2013 (изменено) · Жалоба У меня использование операции "остаток от деления" значительно увеличивает размер скомпилированного кода. Я бы сдеалал как-то так: #define CAPACITY 5 #define DIVIDER 10000 /* DIVIDER should be 10^(CAPACITY - 1) */ char b[CAPACITY] = {0}; int i; int divider = DIVIDER; for (i = 0; i < CAPACITY; i++) { while (v > divider) { v -= divider; b[i]++; } divider /= 10; } Изменено 22 августа, 2013 пользователем igorle Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 23 августа, 2013 Опубликовано 23 августа, 2013 · Жалоба А у меня так реализовано: void bin2bcd(uint8_t* dst, uint16_t bin) // max 9999 { if (bin>9999U) // to feet in signed int type { bin = 9999U; } uint_fast8_t i = 4; do { div_t x = div(bin, 10U); dst[--i] = x.rem; bin = x.quot; } while (i); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться