Typumwandlung ???

Gast #132131
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 #132132
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)
Gast #132134
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.