# int in string oder char umwandeln



## TuX_RuLeZ (14. Oktober 2004)

Hallo leute, 

 ich suche schon seit einigen stunden eine möglichkeit, mit der ich einen integer in ein char array oder ein einfach char umwandeln kann... 

 ich hoffe ihr könnt mir helfen...

 danke im vorraus

 PS: ich benutze den gcc compiler in der version 3.3.3


----------



## Beichtpfarrer (14. Oktober 2004)

Ich gebe dir folgende Tipps:
istringstream,
sprintf,
itoa
oder selber schreiben (ist nich soo schwer..)


----------



## Matthias_Nordwig (14. Oktober 2004)

Das  wie folgt:

char x[länge der Zahl]
int y;

x= (char)y;
------------ wissen musst du eigentlich nur das hier

Für ein Array benötigst du dann entweder zwei Arrays und kopierst auf die gezeigte Art und weise vom einen zum andern oder du generirst dir Objekte


----------



## TuX_RuLeZ (14. Oktober 2004)

ja danke leute...

 ich habe auch schon probiert das selbst zu schreiben, nur sind mir die innovationen ausgegangen =)

 werds mal mit den tipps probieren


----------



## Beichtpfarrer (14. Oktober 2004)

Wär aber sicher keine schlechte Übung, hab ich auch schon gemacht...

Gehe in etwa so vor:

-Stellen der Zahl zählen (also bei 345 sinds 3 Stellen, usw...)
-von hinten her jede Stelle einzeln in einen char umwandeln und in ein Array schreiben (du weißt ja jeweils an welche Position im Array, da du vorher die Stellen gezählt hast).

Oder du könntest dir das StellenZählen auch sparen und stattdessen gleich ins Array schreiben, dann wäre das aber verkehrt rum und du müsstest den String hinterher umdrehen.

Weitere Übung: in einer Funktion auch Umwandlungen in Strings verschiedener Basen möglich zu machen.
Ist gar nicht so schwer, mit ein bisschen Überlegen.

Mfg


----------



## TuX_RuLeZ (14. Oktober 2004)

wie kann man denn die stellen eines integers zählen?
 ich dachte der ist ordinal...

 naja, werd mal sehen ob ich's hinbekomm...

 danke für die antwort (und vor allem dafür, dass du mir die lösung net so leicht machst )

 mfg


----------



## TuX_RuLeZ (15. Oktober 2004)

vollständigkeitshalber und für die, die auch hilfe benötigen poste ich die lösung:

     habe unter http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=IntToString#Answ die korrekte antwort zu meiner frage gefunden.

     danke an alle, die mir den weg gewiesen haben


----------



## paedubucher (15. Oktober 2010)

Ich habe mal was versucht:


```
#define ASCII_SHIFT 48
char *int_to_str(int i)
{
    char *str;
    int len, tmp, c;
    len = (i < 0) ? 2 : 1;
    for (tmp = i; tmp != 0; tmp /= 10)
        len++;
    str = (char *)malloc(sizeof(char) * len); 
    str[len--] = '\0';
    for (tmp = i, len--; tmp != 0;) {
        c = (tmp >= 0) ? (tmp % 10) : (tmp % 10) * -1;
        str[len--] = (char)(c + ASCII_SHIFT);
        tmp /= 10;
    }
    if (i < 0)
        str[0] = '-';
    return str;
}
```

Der erste Teil der Funktion ermittelt die notwendige Anzahl an Zeichen, die für den String gebraucht werden. Die eigentliche Konvertierung in einen String findet dann in der zweiten Schleife statt. Womöglich ist das ein bisschen Overkill, aber dafür wird unterm Strich etwas Speicherplatz gespart (bzw. nicht verschendet).


----------



## paedubucher (15. Oktober 2010)

Ups, mit dem Wert 0 funktioniert das ganze leider nicht. Am einfachsten hackst du da ganz oben einfach folgendes rein:

```
if (i == 0)
    return "0";
```
0 ist halt ein Sonderfall.


----------



## vfl_freak (15. Oktober 2010)

Moin



paedubucher hat gesagt.:


> ...
> Am einfachsten hackst du da ganz oben einfach folgendes rein
> ...


 
hmm, ob ihn das nach genau 6 Jahren noch interessiert  ;-]

Gruß
Klaus


----------



## deepthroat (15. Oktober 2010)

Hi.

Warum gräbst du 6 Jahre alte Themen wieder aus?


paedubucher hat gesagt.:


> Ups, mit dem Wert 0 funktioniert das ganze leider nicht. Am einfachsten hackst du da ganz oben einfach folgendes rein:
> 
> ```
> if (i == 0)
> ...


Das funktioniert aber so nicht bzw. ist dann der Rückgabetype falsch. Ein Stringliteral ist konstant, also "const char*".

Entweder gibst du immer neu allozierten Speicher zurück (den du dann da wo du die Funktion aufrufst mit free() wieder freigeben mußt!) oder du gibst immer einen konstanten String zurück der irgendwo anders alloziert ist (z.B. statisch in der Funktion).

Gruß


----------



## paedubucher (15. Oktober 2010)

vfl_freak hat gesagt.:


> Moin
> 
> 
> 
> ...


 
Ich hatte das gleiche Problem und bin beim Googlen auf diesen Thread gestossen. Dann habe ich gleich schnell meine Lösung gepostet. Aufs Datum habe ich nicht geschaut, sorry...

Ja, und "0" sollte ich dynamisch alloziert zurückgeben. Das ist richtig.


----------

