Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: itoa куда дели?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
d71
ну вот, приехали, так и знал что-то будет не так.
надо выводить на индикатор, а у меня строка не сформирована, ну думаю сейчас, есть функции...
ага, а itoa нет...
может и туплю, но как-то неприятно
dxp
Цитата(d71 @ Mar 1 2006, 09:33) *
ну вот, приехали, так и знал что-то будет не так.
надо выводить на индикатор, а у меня строка не сформирована, ну думаю сейчас, есть функции...
ага, а itoa нет...
может и туплю, но как-то неприятно

Никуда не дели - это нестандартная функция, ее и не обязано там быть. Можно пользоваться sscanf (стандартно и переносимо) или самому преобразователь написать. В последнем случае получится быстрее и компактнее, для МК этот вариант предпочтительнее, хотя возни и побольше.
zltigo
Цитата(d71 @ Mar 1 2006, 05:33) *
ага, а itoa нет...

Привычка с "Борланда"?
Действительно, нет такой в ANSI С. Иногда реализовывалась в старых библиотеках на ASM, как быстарая альтернатива sprintf.


Цитата(dxp @ Mar 1 2006, 08:05) *
Можно пользоваться sscanf (стандартно и переносимо)

Как синхронно ответили :-)
Только sscanf() не надо, это не atoi(), который стандартный.
d71
в этот раз обошелся делением smile.gif
а насчет кода - да вы правы, вставил sprintf и охренел - 1.5 кило как с куста, выкинул...
Георгий
Вообще, я заметил для себя, если код очень критичен к размеру, лучше библиотечные функции переписать в программе. Будет гораздо компактнее, а стэк экономится чуть ли не на порядок.
IgorKossak
Цитата(d71 @ Mar 1 2006, 08:44) *
в этот раз обошелся делением smile.gif

Хорошей альтернативой операциям / % есть стандартная функция div, получающая частное и остаток сразу.
andrvisht
Цитата(IgorKossak @ Mar 1 2006, 13:35) *
Цитата(d71 @ Mar 1 2006, 08:44) *

в этот раз обошелся делением smile.gif

Хорошей альтернативой операциям / % есть стандартная функция div, получающая частное и остаток сразу.

Например так
Код
unsigned char FloatToLCD(unsigned char StrNum, unsigned char StrPos, VarPrm vVar,
                         unsigned char Digits, bool isLeft)
{
  unsigned char    i = LEN_SYM_PRM;
  long    l;
  unsigned char    cBuf[LEN_SYM_PRM];
  ldiv_t DivRes;
  // переводим в целое
  for (unsigned char i = 0; i<Digits; i++) vVar *= 10.0;
  l = labs((long)vVar) + 0.5; // 0.5 для округления
  cBuf[i] = 0x00; // Добавляем конец строки
  while (i > 0)
  {
    DivRes = ldiv(l, 10);
    cBuf[--i] = 0x30 + DivRes.rem;
    l = DivRes.quot;
    if ((LEN_SYM_PRM - i) == Digits) cBuf[--i] = '.';
    if (Digits == 0)
    {
      if (l == 0) break;
    }
    else
    {
      if ((l == 0) && ((LEN_SYM_PRM - i) > (Digits + 1))) break;
    }
  }
  if (vVar < 0.0) cBuf[--i] = '-';
  // ...и выводим строку на ЖКИ
  if (isLeft == 0) LCDString(StrNum, (StrPos + 1 - LEN_SYM_PRM + i), LCDStr, (cBuf + i));
  else LCDString(StrNum, StrPos, LCDStr, (cBuf + i));
  return (LEN_SYM_PRM - i);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.