[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

itoa function (not atoi)

Posted on 1997-09-08
5
Medium Priority
?
2,034 Views
Last Modified: 2006-11-17
I'm looking for a standard function to do integer-to-string conversion.  The comp.lang.c FAQ says to just use sprintf, but I'd rather live without that cruft.  I could swear I found just such a function once while browsing through man pages, but can't locate it again.
0
Comment
Question by:dhm
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 3

Accepted Solution

by:
msmits earned 100 total points
ID: 1254305
Depends on your platform I guess. My borland compiler supports the following function:

  char *itoa(int value, char *string, int radix);

It is documented in the DOS reference, but mentions portability to the win16, win32 and OS/2 platforms. It also says that it is not standard available in ANSI C, ANSI C++ and UNIX.

0
 
LVL 3

Author Comment

by:dhm
ID: 1254306
Oops, I should've specified unix.  I guess I'll have to ask again.  Thanks for the reply.
0
 
LVL 3

Expert Comment

by:msmits
ID: 1254307
After consulting a UNIX Sun Solaris system I came up with the following two from the atoi(3) man page:

  char *lltostr(long long value, char *ptr);
  char *ulltostr(unsigned long long value, char *ptr);

Otherwise a standard itoa is not very difficult:

  char *itoa(int val, char *ptr)
  {
    int sign = (val < 0) ? -1 : 1;
    char tmp[16];
    int i = 0, j = 0;

    val = sign * val;
    while (val != 0) {
      tmp[i] = (val % 10) + '0';
      val = val / 10;
      i++;
    }
    if (i == 0) {
      strcpy(ptr, "0");
    } else {
      if (sign == -1) {
        ptr[j] = '-';
        j++;
      }
      while (i != 0) {
        ptr[j] = tmp[i - 1];
        i--;
        j++;
      }
      ptr[j] = '\000';
    }
  }

While this may not be the most efficient solution or it may not even work, as I completely did this without a compiler and some test cases, it shows that the base-10 algorithm is not difficult.

Although I agree that a library function would be better, so you don't have to invent and test such trivial stuff...

0
 
LVL 3

Author Comment

by:dhm
ID: 1254308
Thanks for snooping around...I'd found the Solaris functions too, but they don't exist on the other platforms I compile for.  I ended up just writing itoa, ltoa, utoa, and ultoa:

const char *itoa( int n )
{
      static char buf[32]; /* yeech */
      sprintf( buf, "%d", n );
      return buf;
}

Now I've just gotta find out how to do thread-specific static
function data (on all those platforms).  *That* sort of thing is the hard part on library functions like this.  The logic is, as you say, trivial.
0
 
LVL 3

Expert Comment

by:msmits
ID: 1254309
There are several solutions:
1. require the caller to pass a valid character buffer

2. malloc the space and require the caller to free it

I find the first solution the 'most' clean.

0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.
Suggested Courses

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question