hi, ich hab mal eine wahrscheinlich recht dämliche Frage. Scheinbar hab ich die Typumwandlung doch noch nicht so recht drauf. Schaut euch bitte mal die beiden folgenden Programme an. Programm 1 funktioniert Programm 2 nicht. Wo versteckt sich der Fehler? Programm1 --------- unsigned int myint; myint = 1; funktion (myint); Programm2 --------- unsigned int myint; unsigned char zeichen; zeichen = '1'; myint = (unsigned int)z; funktion (myint); dabei wird jeweils eine Funktion aufgerufen, die wie folgt ausschaut: void funktion(unsigned int pin) {.....} Mark
unsigned int myint; myint = 1; myint ist hier 1. unsigned int myint; unsigned char zeichen; zeichen = '1'; myint = (unsigned int)zeichen; myint ist hier 0x31 (49 dezimal)
auch mit atoi () bin ich nicht sonderlich weiter gekommen Die Lösung hab ich dann letztendlich irgendwo in diesem Forum gefunden, nämlich: myint = zeichen - '0'; Das funktioniert wunderbar, nur leider kapier ich nicht wieso kann mir das vielleicht einer erklären Mark
atoi erwartet einen String als Argument; '1' ist kein String, sondern ein einzelnes Zeichen. Damit's zum String wird, müsstest Du schon "1" schreiben: myint = atoi("1"); Wenn sichergestellt ist, daß nur eine einstellige Zahl zwischen 0 und 9 auftreten kann, könntest Du auch 48 abziehen. myint = '1' - 48; damit ist myint auch wieder 1
'1' ist 0x31 oder decimal 49. '0' ist 0x30 oder decimal 48. Folglich ist '1' - '0' = 0x1 oder decimal 1. '1' - 48 ist natürlich auch decimal 1.
Aber aufpassen! char zeichen; zeichen = "1"; Geht mächtig in die Hose! Weis jetzt grad nicht, ob sich das überhaupt übersetzen lässt, aber falls doch: "1" besteht aus zwei bytes, 0x31 und 0x00. '1' besteht aus einem byte, 0x31! Das Problem: cahr zeichen hat für genau ein byte Platz ;-)
Das ist halt der Unterschied zwischen einzelnen Zeichen und Strings. Vielleicht sollte mal das Buch "Programmieren in C" von Kernighan & Ritchie (zweite Auflage, Hanser Verlag) gelesen werden?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.