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

 
 
 
Reply to this topicStart new topic
> itoa куда дели?, преобразование int в char
d71
сообщение Mar 1 2006, 03:33
Сообщение #1


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

Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614



ну вот, приехали, так и знал что-то будет не так.
надо выводить на индикатор, а у меня строка не сформирована, ну думаю сейчас, есть функции...
ага, а itoa нет...
может и туплю, но как-то неприятно


--------------------
нет ничего невозможного, есть трудные пути... других не ищем
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 1 2006, 06:05
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(d71 @ Mar 1 2006, 09:33) *
ну вот, приехали, так и знал что-то будет не так.
надо выводить на индикатор, а у меня строка не сформирована, ну думаю сейчас, есть функции...
ага, а itoa нет...
может и туплю, но как-то неприятно

Никуда не дели - это нестандартная функция, ее и не обязано там быть. Можно пользоваться sscanf (стандартно и переносимо) или самому преобразователь написать. В последнем случае получится быстрее и компактнее, для МК этот вариант предпочтительнее, хотя возни и побольше.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 1 2006, 06:12
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(d71 @ Mar 1 2006, 05:33) *
ага, а itoa нет...

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


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

Как синхронно ответили :-)
Только sscanf() не надо, это не atoi(), который стандартный.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
d71
сообщение Mar 1 2006, 06:44
Сообщение #4


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

Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614



в этот раз обошелся делением smile.gif
а насчет кода - да вы правы, вставил sprintf и охренел - 1.5 кило как с куста, выкинул...


--------------------
нет ничего невозможного, есть трудные пути... других не ищем
Go to the top of the page
 
+Quote Post
Георгий
сообщение Mar 1 2006, 06:50
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Вообще, я заметил для себя, если код очень критичен к размеру, лучше библиотечные функции переписать в программе. Будет гораздо компактнее, а стэк экономится чуть ли не на порядок.


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 1 2006, 09:35
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(d71 @ Mar 1 2006, 08:44) *
в этот раз обошелся делением smile.gif

Хорошей альтернативой операциям / % есть стандартная функция div, получающая частное и остаток сразу.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Mar 1 2006, 12:53
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(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);
}
Go to the top of the page
 
+Quote Post

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

 


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


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