Перевод int в char и обратно

Столкнулся со сложностями перевода числа int в массив char*. Например, вход - int a = 1084882, а выход - массив из '1','0','8'... И обратно так же. Есть ли идеи, как реализовать такие функции? Я написал для string, но string использовать нельзя. Мой код:

string toStr(int v)
{
    std::ostringstream oss;
    os << v;
    return os.str();
}

int fromStr(const string& str)
{
    std::istringstream is(str);
    int result;
    is >> result;
    return result;
}

Ответы (1 шт):

Автор решения: Harry

Так сойдет?

char * istr(int n)
{
    char s[20] = { 0 }, // С запасом :)
        *c = s+19;
    int sign = (n < 0) ? (n*=-1, -1) : (n==0) ? 0 : 1;
    if (n == 0) *--c = '0';
    else
    {
        for(; n; n/=10) *--c = n%10+'0';
        if (sign < 0)   *--c = '-';
    }
    char * r = new char[s+20-c];
    char *q = r;
    while(*q++ = *c++);
    return r;
}

int sint(const char * s)
{
    int n = 0, sign = 1;
    if (*s == '-') { sign = -1; s++; }
    while(*s) n = n*10 + *s++ - '0';
    return n*sign;
}

Только надо не забывать удалять потом строку с помощью delete[]...

Update

Правка от @avp:

char * istr(int n)
{
    char s[20] = { 0 }, // С запасом :)
    *c = s+19;
    unsigned int m = n;
    int sign;
    if (n < 0) {
        m = -n;
        sign = -1;
    }
    else if (n==0) sign = 0;
    else sign = 1;
    if (m == 0) *--c = '0';
    else
    {
        for(; m; m/=10) *--c = m%10+'0';
        if (sign < 0)   *--c = '-';
    }
    char * r = new char[s+20-c];
    char *q = r;
    while(*q++ = *c++);
    return r;
}
→ Ссылка