Forum: Mikrocontroller und Digitale Elektronik Typumwandlung ???


von Mark (Gast)


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

von Rufus T. Firefly (Gast)


Lesenswert?

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)

von Mark (Gast)


Lesenswert?

Danke Dir vielmals

meinst du mir atoi komme ich besser hin ?

Mark

von Mark (Gast)


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

von Rufus T. Firefly (Gast)


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

von Reiner (Gast)


Lesenswert?

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

von Mark (Gast)


Lesenswert?

danke euch vielmals

Mark

von OldBug (Gast)


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 ;-)

von Rufus T. Firefly (Gast)


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?

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
Noch kein Account? Hier anmelden.