|
|
  |
itoa куда дели?, преобразование int в char |
|
|
|
Mar 1 2006, 06:05
|

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

|
Цитата(d71 @ Mar 1 2006, 09:33)  ну вот, приехали, так и знал что-то будет не так. надо выводить на индикатор, а у меня строка не сформирована, ну думаю сейчас, есть функции... ага, а itoa нет... может и туплю, но как-то неприятно Никуда не дели - это нестандартная функция, ее и не обязано там быть. Можно пользоваться sscanf (стандартно и переносимо) или самому преобразователь написать. В последнем случае получится быстрее и компактнее, для МК этот вариант предпочтительнее, хотя возни и побольше.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 1 2006, 06:12
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 1 2006, 06:44
|

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

|
в этот раз обошелся делением  а насчет кода - да вы правы, вставил sprintf и охренел - 1.5 кило как с куста, выкинул...
--------------------
нет ничего невозможного, есть трудные пути... других не ищем
|
|
|
|
|
Mar 1 2006, 12:53
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(IgorKossak @ Mar 1 2006, 13:35)  Цитата(d71 @ Mar 1 2006, 08:44)  в этот раз обошелся делением  Хорошей альтернативой операциям / % есть стандартная функция 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); }
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|