Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

typumwandlung????

Empfohlene Antworten

Veröffentlicht

wie kann ich in c ein integer wert in einen char umwandeln?

danke

cu

mohamet

[ 29. Mai 2001: Beitrag editiert von: mohamet ]

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

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

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

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...

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.

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

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.

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.