Anbei der Quellcode eines Compilers hier.
der TO kann ja das ganze in MyItoa umbenennen, Radix durch 10 ersetzen
und hat dann was er sucht.
1 | char *itoa(int val, char *s, int radix)
|
2 | {
|
3 | unsigned int u;
|
4 | char buf[1 + sizeof(val) * 8 + 1];
|
5 | char *p;
|
6 | int sign = 0;
|
7 |
|
8 | if ((radix < 2) || (radix > 36)) {
|
9 | s[0] = 0;
|
10 | return (s);
|
11 | }
|
12 |
|
13 | u = val; /* assume positive */
|
14 | buf[sizeof(buf) - 1] = 0;
|
15 | p = &buf[sizeof(buf) - 2]; /* last character position */
|
16 | if (radix == 10 && (int) u < 0) {
|
17 | sign++;
|
18 | u = -u;
|
19 | }
|
20 | while (1) {
|
21 | *p = (u % radix) + '0';
|
22 | if (*p > '9') *p += 'a'-'0'-10;
|
23 | if ((u /= radix) == 0) break;
|
24 | p--;
|
25 | }
|
26 | if (sign) *--p = '-';
|
27 | return (memcpy(s,p,(size_t)(&buf[sizeof(buf)] - p)));
|
28 | }
|
Jan H. schrieb:
> ohne mehrere "if´s"
Uups... selbst ohne radix bleiben noch 4ifs...
OK, sign braucht er nicht, ... bleiben 2 ifs.
Mmh, wenn ifs bei ihm so teuer sind, vielleicht ?: stattdessen?
Und dann noch Stackspeicher und memcpy .....