Veröffentlicht 29. Mai 200124 j wie kann ich in c ein integer wert in einen char umwandeln? danke cu mohamet [ 29. Mai 2001: Beitrag editiert von: mohamet ]
29. Mai 200124 j Wenn du den int-wert als ascII-zeichen in eine datei speichern willst mach es mit fprintf() ansonsten: int zahl = 2000; char stringzahl[20]; //maximale länge von 19 ziffern int i=18; //letzte ziffer an pos 18 stringzahl[19]=0; //pos nach letzter ziffer muß 0 sein (stringabschluß) for (;zahl>0;i--) //solange zahl >0 { stringzahl=zahl%10+'0'; //ziffer zu zeichen und in den string zahl=zahl/10; //zahl /10 (rest verschwindet bei int) } i++; //durch schleife eine pos zu weit vorn //stringzahl+i= stringanfang
30. Mai 200124 j Hi, zum Umwanden eines int in eine char* gibt mehrere Möglichkeiten: char s_Str[20]=""; int i_int=5; // 1. sprintf gehört meines Wissens zu stdio.h sprintf(s_Str,"%d",i_int); // 2. itoa gehört glaub ich zu stdlib.h itoa(s_Str,10,i_Int); // Bzw. da du eigentlich auf char wandeln willst: s_Str[0]=(char)i_Int; // ;-) Ich hoffe, daß hat etwas geholfen. MotM
30. Mai 200124 j Mit Verlaub Leute, ich glaube, mohament meint einen cast. int i=123; char c; c = (char) i; Uli
30. Mai 200124 j Original erstellt von EisenUli: <STRONG>Mit Verlaub Leute, ich glaube, mohament meint einen cast. int i=123; char c; c = (char) i; Uli</STRONG> genau das hab ich gesucht! danke! cu mohamet
1. Juni 200124 j Original erstellt von mohamet: <STRONG>genau das hab ich gesucht! danke! cu mohamet</STRONG> Das hat aber nichts mit umwandeln zu tun. Die variable bleibt ein Integer (von der speicherung her), wird allerdings anders interpretiert (als char). Und eigendlich ist typecasten Codevergewaltigung...
5. Juni 200124 j Original erstellt von Ketzer: Und eigendlich ist typecasten Codevergewaltigung... kommt ganz auf den fall drauf an. normalerweise würde ich jeden schlagen der einfach nur so ein wenig castet aber es soll auch schon fälle gegeben haben, wo es nicht anders ging. da finde ich es dann schon in ordnung.
5. Juni 200124 j Original erstellt von maddin: <STRONG>kommt ganz auf den fall drauf an. normalerweise würde ich jeden schlagen der einfach nur so ein wenig castet aber es soll auch schon fälle gegeben haben, wo es nicht anders ging. da finde ich es dann schon in ordnung.</STRONG> Also Typecasting habe ich eigendlich bisher nur benötigt wenn ich void-pointer hatte. z.B. als Aufrufargument von einem Assemblermodul übergeben oder von malloc(). Meine Anmerkung war auch eher als "Warnung" zu verstehen. Ketzer
6. Juni 200124 j Sorry EisenUli, aber der Cast liefert keinen String zurück der als Zahl 123 erkannt werden könnte. Das mit ITOA ist die bessere Lösung. Am allerbesten ist es eine eigene Number-Klasse aufzubauen, die selbständig in hex oder Ascii oder CString, etc. umrechnet und nacher nur damit zu arbeiten (wenn auch alles richtig klappt). Letzte Möglichkeit, die ich noch nicht gesehen habe wäre die Zahl als Bits oder Nibbles zu berechnen. Das geht so: Zahl 123=%01111011 Man macht eine Tabelle, die den Bit-Wert von 0-32 enthält Bsp: Ascii&Bits (von rechts gelesen) 1*1 = %1 +1*2 = %10 +0*4 = %100 +1*8 = %1000 +1*16 = %10000 +1*32 = %100000 +1*64 = %100000 usw. Die bits werden einzeln ausge-ANDed (in Assembler gab´s noch den Rol ins Carry-Bit - geht heute auch noch mit dem integrierten MASM) und der Ascii-Wert in einm Char-Array aufaddiert. Überträge müssen berücksichtigt werden!! 01111011 wäre dann: 1 +2 +8 +16 +32 +64 =123 Das geht gut programmiert übrigens recht schnell und einfach! Nur ein wenig Platz für die Ascii-Werte muß reserviert werden - je nachdem mit wieviel Bits man maximal arbeitet 64 Bits = 64 Ascii-Werte!!! Das ganze geht natürlich auch mit Nibbles: 123=%0111 1011 = 0111*16 und 1011*1 hex 0xF = Zahlen 0-15 in einem Array FxF = Zahlen 16-255 genauso Hier werden die Bits also in 4er-Packs rausgeANDed. Das Aufaddieren funktioniert ansonsten gleich, alles geht noch schneller nur der Umfang der Ascii-Tabelle steigt um das 16-Fache. ist Aber dafür auch 4x schneller! Die Ascii-Tabellen kann man sich ja generieren lassen, da spart man sich dann viel Arbeit. Ich bin ehemaliger Assembler-Programmierer und da hat man das immer so gelöst! Ist zwar heute (fast) kein Thema mehr, aber wer wirklich alles übers Programmieren wissen will, sollte auch mal über den Tellerrand schauen. P.S.: Zum Programmieren von MMX1&2, ISSE & Geforce3 benötigt man übrigens wieder Assembler - also ganz ohne geht auch wieder nicht.
6. Juni 200124 j Original erstellt von Crush1: <STRONG>Sorry EisenUli, aber der Cast liefert keinen String zurück der als Zahl 123 erkannt werden könnte.</STRONG> Soll er ja auch gar nicht. Es soll nach char gecastet werden. Uebrigens waere eine Umwandlung nach String auch gar keine Typumwandlung im Sinne eines Cast. Ein Grossteil der Debatte in diesem Thread beruht auf diesem Missverstaendnis. Uli
6. Juni 200124 j Wenn´s nur ums casten ging - das klappt natürlich warum auch nicht - dann ist´s genehmigt und ok! Ich denke auch das das zu Mißverständnissen führen kann. Alles klar!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.