Dshing schrieb:
Mit itoa funktioniert es nicht, das war auch meine erste Idee aber es gibt letztlich immer nur 3 wieder, aber nicht 51.
Hä??
Anfangs hieß es noch:
Dshing schrieb:
Jetzt will ich diese '3' aber als "rechnbare" Variable haben also z.B. int i = 1 + 2;
Es wird immer unklarer was du überhaupt erreichen willst. Wenn du mit der Information, die in '3' steckt, rechnen willst, ist die 51 doch gar nicht das Ziel, sondern eben die Zahl 3 ! Oder was genau hast du sonst damit vor? Im Idealfall bei solchen Fragen daher immer die Rahmenbedingungen näher beschreiben, gerne auch mit Code-Snippets.
atoi und itoa
wandeln einen String in einen Integer
um und umgekehrt. Sie übersetzen sozusagen die
Information von einem Datentyp in den anderen, also zB das was der Mensch an dieser Stelle sieht:
'3' <> 3
Wie der Computer dabei das Zeichen oder die Zahl letztendlich im Speicher ablegt, ist vollkommen irrelevant. Auf dem Speicherplatz des chars steht etwas vollkommen anderes als auf dem Speicherplatz des Integers.
Interpretierter Zahlenwert vs Zeichen (convert)
Code:
char zeichen = '3';
int zahlenwert = atoi(zeichen);
// --> zahlenwert = 3
char buffer[10];
itoa(zahlenwert, buffer, 10);
// --> buffer = "3"
Wenn du hingegen den ASCII-Wert eines char willst, musst du ihn einfach nur casten. Beim Casten wird das was im Speicher abgelegt ist einfach nur
anders interpretiert. Das Programm liest also das Zeichen vom Speicher, "tut aber so als wäre es eine Zahl". Heraus kommt der ASCII-Wert, weil dasselbe Bitmuster im Speicher, das für '3' steht - nämlich 0011 0011 - eben auch die Zahl 51 ergibt.
ASCII-Wert vs Zeichen (cast)
Code:
char zeichen = '3';
int asciiwert = (int) zeichen;
// --> asciiwert = 51
char zeichen2 = (char) asciiwert;
// --> zeichen2 = '3'
Natürlich kann man aus einem Zeichen, das eine Zahl darstellt, auch aktiv den ASCII-Wert berechnen, wenn man die ASCII-Tabelle kennt, aber das ist bei der Verwendung von atoi bzw. itoa gar nicht notwendig. Letztendlich muss man ja auch daran denken, dass ASCII gar nicht alle Zeichen abdeckt, sondern nur den kleinsten gemeinsamen Nenner darstellt. Spätestens dann, wenn man also nicht nur a-z, A-Z und 0-9 verwendet, kommen so oder so Encodings / Code Pages ins Spiel und dann ist der Drops eh gelutscht und man ist gezwungen, Konvertierfunktionen zu verwenden.
Übrigens: In jedem Fall muss man natürlich auch sicherstellen, dass im char tatsächlich eine Zahl und kein Buchstabe drinsteckt. Sonst kann das schnell ins Auge gehen, wenn man das ungeprüft durchwinkt.