реклама на сайте
подробности

 
 
> Перевод из 16 ричной в 10чную на Си
Slavast
сообщение Jan 25 2011, 13:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Добрый день!
Необходимо с АЦП вывести снятое напряжение на терминал.
Подскажите как на Си можно перевести число из 16ричной системы в 10чную?
А то фраза на экране "Напряжение АЦП: 0x56" смотрится как-то неубедительно.
Есть какой-то готовый код или библиотека?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Jan 25 2011, 15:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Я иногда пользуюсь вот таким кодом в разных вариациях. Написано было еще в универеsm.gif
CODE
/*******************************************************************************
Преобразовывает переменную UINT8 в строку с гашением не значащих нулей
*******************************************************************************/
INT uint8_2str(UINT8 val, P_CHAR str)
{
INT i, len = 0;
BOOL zero = TRUE;
UINT8 d = 100;
CHAR s;

for(i = 0; i < 3; i++) /* цикл по трем знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val -= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}

if(TRUE == zero && s == 0 && i < 2)
{
}
else
{
*str++ = s + 0x30; /* преобразуем в ASCII символ */
len++;
zero = FALSE;
}
d /= 10; /* получаем следующий (младший) порядок */
}

return len;
}

/*******************************************************************************
Преобразовывает переменную UINT8 в строку без гашения
не значащих нулей в диапазоне 0...99 (два знака)
*******************************************************************************/
void uint8_2str2(UINT8 val, P_CHAR str)
{
INT i;
UINT8 d = 10;
CHAR s;

for(i = 0; i < 2; i++) /* цикл по двум знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val -= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}

*str++ = s + 0x30; /* преобразуем в ASCII символ */
d /= 10; /* получаем следующий (младший) порядок */
}
}

/*******************************************************************************
Преобразовывает переменную UINT16 в строку
*******************************************************************************/
INT uint16_2str(UINT16 val, P_CHAR str)
{
INT i, len = 0;
BOOL zero = TRUE;
UINT16 d = 10000;
CHAR s;

for(i = 0; i < 5; i++) /* цикл по пяти знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val-= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}

if(TRUE == zero && s == 0 && i < 4)
{
}
else
{
*str++ = s + 0x30; /* преобразуем в ASCII символ */
len++;
zero = FALSE;
}
d /= 10; /* получаем следующий (младший) порядок */
}

return len;
}

/*******************************************************************************
Преобразовывает переменную UINT32 в строку
*******************************************************************************/
INT uint32_2str(UINT32 val, P_CHAR str)
{
INT i, len = 0;
BOOL zero = TRUE;
UINT32 d = 1000000000;
CHAR s;

for(i = 0; i < 10; i++) /* цикл по десяти знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val-= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}

if(TRUE == zero && s == 0 && i < 9)
{
}
else
{
*str++ = s + 0x30; /* преобразуем в ASCII символ */
len++;
zero = FALSE;
}
d /= 10; /* получаем следующий (младший) порядок */
}

return len;
}

/*******************************************************************************
Преобразует строку в 8-бит число.
Возвращает количество цифр в числе, 0 - если строка не число.
*******************************************************************************/
INT str2_uint8(P_CHAR str, P_UINT8 val)
{
INT i = 0;
UINT8 res = 0;
CHAR s;

while(i < 3)
{
s = *str++;
if(s < '0' || s > '9')
break;
res = res * 10 + s - '0';
i++;
}

*val = res;
return i;
}

/*******************************************************************************
Преобразует строку в 16-бит число.
Возвращает количество цифр в числе, 0 - если строка не число.
*******************************************************************************/
INT str2_uint16(P_CHAR str, P_UINT16 val)
{
INT i = 0;
UINT16 res = 0;
CHAR s;

while(i < 5)
{
s = *str++;
if(s < '0' || s > '9')
break;
res = res * 10 + s - '0';
i++;
}

*val = res;
return i;
}

/*******************************************************************************
Преобразует строку в 16-бит число.
Возвращает количество цифр в числе, 0 - если строка не число.
*******************************************************************************/
INT str2_uint32(P_CHAR str, P_UINT32 val)
{
INT i = 0;
UINT32 res = 0;
CHAR s;

while(i < 10)
{
s = *str++;
if(s < '0' || s > '9')
break;
res = res * 10 + s - '0';
i++;
}

*val = res;
return i;
}


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 19:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016