Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразовать целое в строку
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
ViKo
Не нашел в Keil функции преобразования целого числа в строку, ну, как itoa в Hi-Tech C for PIC, например. Хочу вывести код с АЦП на ЖКИ. Неужто придется самому изобретать такую тривиальную вешь?
zksystem
Цитата(ViKo @ Nov 8 2009, 12:24) *
Не нашел в Keil функции преобразования целого числа в строку, ну, как itoa в Hi-Tech C for PIC, например. Хочу вывести код с АЦП на ЖКИ. Неужто придется самому изобретать такую тривиальную вешь?

а printf("value=%u",uiNumber); не катит?
ViKo
Цитата(zksystem @ Nov 8 2009, 12:38) *
а printf("value=%u",uiNumber); не катит?

А как указать, куда "катить"? Есть отладочная плата MCBSTM32, на ней ЖКИ двухстрочный. Запустил проект Blinky, там для ЖКИ есть несколько функций
Код
extern void lcd_init       (void);
extern void lcd_clear      (void);
extern void lcd_putchar    (char c);
extern void set_cursor     (int column, int line);
extern void lcd_print      (char *string);
extern void lcd_bargraph   (int value, int size);
extern void lcd_bargraphXY (int pos_x, int pos_y, int value);

Как мне к ним прицепить printf? Я пробовал, не получилось.
baralgin
Простейшая функция:
Код
char* adc2str(uint_fast16_t d, char* out)
{
    out[4] = '\0';
    out[3] = '0' + ( d       )    % 10;
    out[2] = '0' + ( d /= 10 )    % 10;
    out[1] = '0' + ( d /= 10 )    % 10;
    out[0] = '0' + ( d /  10 )    % 10;
    return out;
}

На арме должна работать быстро(у меня примерно такая выполняется за 1мкс на stm32-28Мц). Использовать примерно так:
Код
char str[5];
adc2str(adc_value, str);

Эта функция только для 4-ёх значного числа, но легко модифицируется для любых чисел.
Ivan_Petrov
Цитата(zksystem @ Nov 8 2009, 12:38) *
а printf("value=%u",uiNumber); не катит?

Код
sptrinf (dst, "%u", n);

Код
{
    int i, j;

    /* convert number to string. */
    for (i = 0;;)
    {
        dst[i++] = '0' + n % 10;
        n = n / 10;

        if (n == 0)
            break;
    }

    /* terminate string. */
    dst[i] = '\0';

    /* swap chars ordering. */
    for (j = 0; i; ++j)
    {
        char c;

        c = dst[--i];
        dst[i] = dst[j];
        dst[j] = c;
    }
}


p.s.
Если нужен более быстрый код, без повторного обращения к буферу, то стоит предварительно логарифмировать N через бинарное дерево и заполнить буфер с конца. Также рекомендую оперцию деления заменить на "деление на константу" через умножение и сдвиги.
ViKo
За примеры преобразования числа в строку - Спасибо!
Нашел, как перенаправить printf на ЖКИ. В файле Retarget.c подменил функцию fputc
Код
extern void lcd_putchar(char c);

/// int fputc (int ch, FILE *f) { return (ser_putchar(ch)); }
int fputc (int ch, FILE *f)
  {
  lcd_putchar((char)ch);
  return ch;
  }

Теперь число выводится на индикатор
Код
    printf("%d", AD_value);

а за ним еще лезет текст "AD value =". Но это уже другой вопрос.
IgorMarx
Батенька, вам учить язык C нужно smile.gif, а не на форумах такие вопросы спрашивать. Пардон за банальный совет )
ViKo
"Творчески переработав" предложенное, сотворил следующую функцию
Код
void NumberToString (int Number, char * StrBuf)
  {
  StrBuf[5] = '\0';
  for (signed char i=4; i>=0; i--)
    {
    StrBuf[i] = '0' + Number % 10;
    Number /= 10;
    }
  }


Ну а в программе использую просто
Код
  char AD_Buffer[7];

  NumberToString(AD_value, AD_Buffer);
  printf("ADC = %s", AD_Buffer);

Спасибо всем откликнувшимся (кроме...)!
zltigo
Moderator:
Тема избита до невозможности http://www.google.lv/search?client=opera&a...-8&oe=utf-8 Автору настоятельная рекомендация прежде чем мусорить - пользоваться поиском.
sergeeff
Да блин, спасибо за сокровенные знания! А то мы бы так в серости и остались пребывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.