PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umwandlung: int -> char*



BurningWave
04.05.2008, 12:09
Hallo,

ich habe eine kleine Frage: Wie kann ich eine Variable vom Typ int in eine des Typs char* umwandeln?

mfg _R2D2

Felix G
04.05.2008, 12:39
Naja, normale Typumwandlungen gehen grundsätzlich erstmal

a) automatisch (falls möglich), oder

b) mit einem expliziten cast, da geht int -> char so: Charvariable = (char)Intvariable


Aaaaaber...
bei int nach char* scheint es mir als würdest du etwas anderes beabsichtigen, nämlich eine Zahl in einen Text umzuwandeln, richtig?

in diesem Fall kann man z.B. printf() verwenden

BurningWave
04.05.2008, 12:57
Es stimmt, ich möchte eine Zahl in einen Text umwandeln, den ich dann auf einem LCD-Display ausgeben kann.



Charvariable = (char)Intvariable

Das habe ich auch schon probiert, aber die Charvariable bekommt dann irgendeinen undefinierten Wert aber nicht meine Zahl zugewiesen.



in diesem Fall kann man z.B. printf() verwenden

Wie würde das dann mit printf() funktionieren?

vklaffehn
04.05.2008, 22:55
Moin!
Int nach string geht wunderbar mit itoa()... momentchen... irgendwo hatte ich doch.... ah, jetz ja :


unsigned int wert;
unsigned char text[7];
itoa(wert,text,10);

die Zehn ist die Basis, in dem fall also dezimal, und 'itoa' heißt wohl 'integer to ASCII'.

Das ein Cast nicht funktioniert, ist eigentlich logisch, wenn man sich mal mit verschiedenen Variablentypen auseinandersetzt, am Ende sind es ja alles bytes, ein Int sind halt 2, ein Char 1 und wenn dein int zufällig '65' wäre und Du es als char behandeln würdest, dann wäre das halt 'A', da die 65 der ASCII Code für das 'A' ist. Alles eine Frage der Interpretation.

Oder so ähnlich ... .-)

MfG
Volker

fluchtpunkt
08.05.2008, 10:11
[...]wenn dein int zufällig '65' wäre und Du es als char behandeln würdest, dann wäre das halt 'A', da die 65 der ASCII Code für das 'A' ist.
das kann man sich zu Nutze machen wenn man nur einzelne Ziffern umwandeln moechte:

char ziffer = 7;
char ascii;
ascii = ziffer + '0';

und schon hat man die Ziffer 7 in die ASCII-Darstellung umgewandelt. Umgekehrt gehts natuerlich genauso.

Mal so nebenbei als Tipp

BurningWave
20.07.2008, 16:36
Ich möchte aber int nach char* nicht nach char umwandeln!

Wie funktioniert das mit printf()?

mfg

uwegw
20.07.2008, 17:49
Ich würde itoa empfehlen, wie Volker schon geschrieben hat. printf ist ne ziemlich universelle Funktion, die aber leider auch viel mehr Ressourcen verbraucht als itoa.

BurningWave
20.07.2008, 18:02
Aber mit itoa bekomme ich doch char[] und nicht char* , oder?
Ich brauche den Wert als Text, um ihn auf einen LCD-Display auszugeben. Dazu stehen mir nur diese Funktionen zur Verfügung,


void lcd_write1(char text)
{
sbi(LCD_PORT, 2);
lcd_send(text);
}

void lcd_write2(char* pText)
{
while(pText[0] != 0)
{
lcd_write1(pText[0]);
pText++;
}
}

void lcd_write3(char* pText, int count)
{
while(count != 0)
{
lcd_write1(pText[0]);
pText++;
count--;
}
}


bei denen ich den Wert als char* brauche. Oder gibt es eine Möglichkeit um zu überprüfen, wie groß das Arrey ist, also wie viele Felder es hat?

sternst
20.07.2008, 18:11
unsigned char text[7];
...
lcd_write2(text);

BurningWave
20.07.2008, 18:16
Wenn das Arrey 7 Felder lang ist und ich z.B.


unsigned int wert;
unsigned char text[7];
itoa(wert,text,8);
lcd_write2(text);

schreibe, dann ist doch nur ein Feld im Arrey belegt und die restlichen Felder sind unbelegt. Macht das denn nichts aus? Zeigt mir das Display dann trotzdem nur "8" an?

sternst
20.07.2008, 18:34
schreibe, dann ist doch nur ein Feld im Arrey belegt
Nein, wie viel vom Array belegt ist, hängt vom Inhalt von "wert" ab.


Macht das denn nichts aus?
Konsultiere bitte ein C-Buch zum Thema: Wie sieht in C ein String aus?


itoa(wert,text,8);
Wieso 8? Möchtest du wirklich eine Oktalzahl haben?

BurningWave
20.07.2008, 18:45
Nein, das ist ein Fehler, da habe ich mich mit den Parametern vertan. Ich wollte eigentlich damit sagen:
itoa(8,text,10);

(Ich programmiere eigentlich in C++, da ist so etwas viel leichter. In C vermisse ich einige Funktionen, die es in C++ gibt.)

BurningWave
20.07.2008, 19:20
Zitat:
schreibe, dann ist doch nur ein Feld im Array belegt

Nein, wie viel vom Array belegt ist, hängt vom Inhalt von "wert" ab.


Jetzt habe ich noch einmal nachgedacht, und es ist dann wirklich nur ein Feld belegt:
char Array1[]='8'
char Array2[]="147"
Jetzt ist bei Array1 das Feld [0] 8 und bei Array2 das Feld [0] 1, das Feld [1] 4 und das Feld [2] ist 7. Array1 hat demnach nur ein Feld und Array2 hat 3 Felder.
Bei der Zuweisung


unsigned int wert;
unsigned char text[7];
wert = 8;
itoa(wert,text,8);

ist beim Array Text nur das Feld [0] belegt und hat den Wert 8. Die anderen Felder sind doch undefiniert, oder?

fhs
20.07.2008, 19:36
Hallo,

char Array1[]='8'
1. ...selbst nach Anhängen eines ";" bleibt das eine Anweisung, bei der der Compiler eine Fehlermeldung ausgeben müsste!
2. ... tätest Du gut daran, Dich mal mit "Strings" auseinanderzusetzen (wie Dir "sternst" schon geraten hat) -- auch mit der Tatsache, dass diese mit '\0' terminiert werden; z.B. http://www.hs-augsburg.de/~sandman/c_von_a_bis_z/c_013_012.htm#RxxobKap013012040028511F03818C .

Gruß

Fred