Хотите конвертировать целое число в строку без функции Itoa - PullRequest
0 голосов
/ 03 апреля 2012

Я хочу преобразовать int to char* в C без использования функции itoa().

Поскольку в моих системах Linux функция i itoa отсутствует.Я использую этот код, который я нашел из здесь

Я хочу запустить эту функцию на встраиваемых устройствах, также использующих Linux.

Так что я ищу без использованияиз itoa.

Я не хочу использовать sprintf также потому, что он используется только для распечаток.

Так что любое тело, пожалуйста, помогите мне разобраться с этой проблемой.

Спасибо

Ответы [ 5 ]

7 голосов
/ 03 апреля 2012

Вещи snprintf это идеальная функция для этого:

char str[LEN];
snprintf(str, sizeof(str), "%d", num);
4 голосов
/ 04 апреля 2012

Вот простой фрагмент, который вы можете использовать.Существуют более элегантные и продвинутые способы, но они выполняют свою работу.

В прошлых встроенных проектах я измерял это примерно в 1000 раз эффективнее, чем sprintf ().Этот код также совместим с MISRA-C.

void getDecStr (uint8_t* str, uint8_t len, uint32_t val)
{
  uint8_t i;

  for(i=1; i<=len; i++)
  {
    str[len-i] = (uint8_t) ((val % 10UL) + '0');
    val/=10;
  }

  str[i-1] = '\0';
}
3 голосов
/ 03 апреля 2012
#include <stdio.h>
#include <string.h>

#if 0
char *strrev(char *str){
    char c, *front, *back;

    if(!str || !*str)
        return str;
    for(front=str,back=str+strlen(str)-1;front < back;front++,back--){
        c=*front;*front=*back;*back=c;
    }
    return str;
}
#endif

char *itoa(int v, char *buff, int radix_base){
    static char table[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    char *p=buff;
    unsigned int n = (v < 0 && radix_base == 10)? -v : (unsigned int) v;
    while(n>=radix_base){
        *p++=table[n%radix_base];
        n/=radix_base;
    }
    *p++=table[n];
    if(v < 0 && radix_base == 10) *p++='-';
    *p='\0';
    return strrev(buff);
}

int main ()
{
  int i;
  char str[33];

  printf ("Enter a number: ");
  scanf ("%d",&i);

  itoa (i,str,10);
  printf ("decimal: %s\n", str);

  itoa (i, str, 16);
  printf ("hexadecimal: %s\n", str);

  itoa (i, str, 2);
  printf ("binary: %s\n", str);

  return 0;
}
3 голосов
/ 03 апреля 2012

Я нашел реализацию itoa по этой ссылке .Может быть, это поможет вам, как и для меня.

0 голосов
/ 03 апреля 2012

Я нашел решение относительно этого ..

Я счастлив, и я хочу, чего я ожидал.

#include <string.h>
#include <stdlib.h>

char *i_to_a(int num);

int main()
{

    char *str = i_to_a(4567);
    printf("%s",str);
    free(str);
    str = NULL;
return 0;

}
int no_of_digits(int num)
{
    int digit_count = 0;

    while(num > 0)
    {
        digit_count++;
        num /= 10;
    }

    return digit_count;
}


char *i_to_a(int num)
{
    char *str;
    int digit_count = 0;

    if(num < 0)
    {
        num = -1*num;
        digit_count++;
    }

    digit_count += no_of_digits(num);   
    str = malloc(sizeof(char)*(digit_count+1));

    str[digit_count] = '\0';

    while(num > 0)
    {
        str[digit_count-1] = num%10 + '0';
        num = num/10;
        digit_count--;
    }

    if(digit_count == 1)
        str[0] = '-';

    return str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...