Перейти к содержанию
    

Преобразовать целое в строку

Не нашел в Keil функции преобразования целого числа в строку, ну, как itoa в Hi-Tech C for PIC, например. Хочу вывести код с АЦП на ЖКИ. Неужто придется самому изобретать такую тривиальную вешь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не нашел в Keil функции преобразования целого числа в строку, ну, как itoa в Hi-Tech C for PIC, например. Хочу вывести код с АЦП на ЖКИ. Неужто придется самому изобретать такую тривиальную вешь?

а printf("value=%u",uiNumber); не катит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а 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? Я пробовал, не получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простейшая функция:

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-ёх значного числа, но легко модифицируется для любых чисел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а 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 через бинарное дерево и заполнить буфер с конца. Также рекомендую оперцию деления заменить на "деление на константу" через умножение и сдвиги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За примеры преобразования числа в строку - Спасибо!

Нашел, как перенаправить 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 =". Но это уже другой вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Батенька, вам учить язык C нужно :), а не на форумах такие вопросы спрашивать. Пардон за банальный совет )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Творчески переработав" предложенное, сотворил следующую функцию

 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);

Спасибо всем откликнувшимся (кроме...)!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Moderator:

Тема избита до невозможности http://www.google.lv/search?client=opera&a...-8&oe=utf-8 Автору настоятельная рекомендация прежде чем мусорить - пользоваться поиском.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...