Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: long to string в IAR?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Vladi33
Здравствуйте, помогите!
Как преобразовать число в строку?
В ICCAVR пользовался функцией ltoa()
В IAR такой функции нет, подозреваю что нужен printf(), но не получается:

#include <stdio.h>
unsigned char buf[20];
long la;
#define stdout buf;
void main(){
la=10;
printf("hello");
printf("%l",la);
PrnBuf();
}
Ничего не работает, буфер пуст, что делать?
пробовал разные настройки.
IgorKossak
Функция ltoa() нестандастная.
Но пользоваться лучше не printf(), а sprintf_P() с форматной строкой во флеш памяти.
Или написать свою функцию с применением ldiv().
Vitaly
Цитата(Vladi33 @ Jul 1 2005, 12:19)
Здравствуйте, помогите!
Как преобразовать число в строку?
В ICCAVR пользовался функцией ltoa()
В IAR такой функции нет, подозреваю что нужен printf(), но не получается:

#include <stdio.h>
unsigned char buf[20];
long la;
#define stdout buf;
void main(){
  la=10;
  printf("hello");
  printf("%l",la);
  PrnBuf();
}
Ничего не работает, буфер пуст, что делать?
пробовал разные настройки.
*


Я поступил проще - из ICCAVR взял исходники функций itoa() и ltoa() и скомпилил в IAR. Нормально работает.
IgorKossak
Цитата(Vitaly @ Jul 3 2005, 13:01)
Я поступил проще - из ICCAVR взял исходники функций itoa() и ltoa() и скомпилил в IAR. Нормально работает.
*

А чего бы ей и не работать если написана на С? Ведь там нет ничего аппаратнозависимого.
Другое дело, когда нет исходников или реализовано без ldiv (с применением ldiv работает быстрее), то алгоритм очень простой, состоящий в преобразовании в символ (прибавлении '0') остатка от деления исходного числа на 10.
NickB
В stdlib.h находим :
__INTRINSIC MEMORY_ATTRIBUTE long int strtol(const char *, char **, int);
__INTRINSIC MEMORY_ATTRIBUTE unsigned long int strtoul(const char *, char **,
int);
IgorKossak
Цитата(NickB @ Jul 5 2005, 10:32)
В stdlib.h находим :
__INTRINSIC MEMORY_ATTRIBUTE long int strtol(const char *, char **, int);
__INTRINSIC MEMORY_ATTRIBUTE unsigned long int strtoul(const char *, char **,
                                                      int);
*

Немного не из той оперы.
Ведь надо long to string, а не string to long.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.