Typumwandlung ???

Gast #132131
Lesenswert?

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
Gast #132134
Lesenswert?

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
Gast #132135
Lesenswert?

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
Gast #132138
Lesenswert?

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 ;-)
Gast #132139
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren