mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu C: char[] to unsigned long int


Autor: Bastler65 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein paar Anfängerprobleme beim Umwandeln von Dateitypen in 
meinem uC (programmiert in C). Ich möchte den Inhalt eines Char-Arrays 
in einen Long-Wert umwandeln:

Zum Beispiel diesen:
char arr[50] = "67518";
Die Größe des Arrays ist gegeben alle anderen Stellen haben den Wert 0.

Ich habe bereits diverse Variationen von atol und strtol bzw. strtoul:

unsigned long laa1,laa2,laa3,laa4,laa5,laa6;
laa1 = strtoul(arr);
laa2 = strtol(arr);
laa3 = atol(arr);
laa4 = strtoul(arr,NULL,10);
laa5 = strtol(arr,NULL,10);
laa6 = atol(arr,NULL,10);

Ich bekomme immer nur eine 1 oder eine 0 als Rückgabewert.

Was mache ich falsch?
Ich habe mir schon diverse Beispiele angesehen und ausprobiert aber 
trotzdem bekomme ich meinen Wert nicht gewandelt.

Ich denke, es ist nichts großartiges. Kann mir jemand meine Augen 
öffnen?

Gruß
Bastler65

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
laa4 = strtoul(arr,NULL,10);
würde ich mal behaupten ist prima.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
laa3 = atol(arr);
geht übrigens auch, die nehme ich aber üblicherweise nicht
(man kann nicht kontrollieren, ob das Konvertieren geklappt
hat)

Autor: Klaus Wachtler (mfgkw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bastler65 schrieb:
> Kann mir jemand meine Augen öffnen?

Dir werd' ich die Augen öffnen!

Autor: Bastler65 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für deine Antwort, aber leider steht nach der Konvertierung in 
laa4 nur eine 1!

Gruß
Bastler65

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bastler65 schrieb:

> Danke für deine Antwort, aber leider steht nach der Konvertierung in
> laa4 nur eine 1!

Dann zeig kompletten kompilierbaren Code!

(Woher weißt du, dass da nur 1 drinnen steht?)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
laa3 = atol(arr);
laa4 = strtoul(arr,NULL,10);
laa5 = strtol(arr,NULL,10);

Funktionieren einwandfrei. Vielleicht solltest du auch mal in einer 
Dokumentation nachlesen, wie die Funktionen zu gebrauchen sind, anstatt 
wahllos irgendwelche Aufrufe zu probieren?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
>
> laa3 = atol(arr);
> laa4 = strtoul(arr,NULL,10);
> laa5 = strtol(arr,NULL,10);
> 
>
> Funktionieren einwandfrei. Vielleicht solltest du auch mal in einer
> Dokumentation nachlesen, wie die Funktionen zu gebrauchen sind, anstatt
> wahllos irgendwelche Aufrufe zu probieren?

persönlich habe ich den

   printf( "%d", laa3 );

Fehler in Verdacht, aber wenn er seinen Code nicht zeigen will ....

Autor: Bastler65 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für eure Hilfe. Ich habe (glaub ich) mein Problem gefunden, ein 
typischer Anwendungsfehler:

Mein Include der stdlib.h stand in einem ifdef-Bereich. Dadurch hat er 
irgend eine andere strtoul verwendet die immer eine 1 oder 0 
zurückgeworfen hat. Mit kleinen Werten kat komischerweise atoi 
einwandfrei funktioniert.

Ich habe jetzt die von Klaus Wachtler empfohlene Methode genommen.

Ich denke das Problem ist erst einmal beseitigt. Vielen Dank für eure 
Hilfe!

Gruß
Bastler65

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dürfte i.d.R. aber wenig Probleme machen. Ein unsigned long ist meistens 
(Gcc, Pentium, 32 Bit) genauso breit wie ein int und 67518 passt locker 
herein.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bastler65 schrieb:
> Mein Include der stdlib.h stand in einem ifdef-Bereich. Dadurch hat er
> irgend eine andere strtoul verwendet die immer eine 1 oder 0
> zurückgeworfen hat. Mit kleinen Werten kat komischerweise atoi
> einwandfrei funktioniert.

Und was hattest du mit den Warnungen gemacht, die der Compiler
bei deinem Programm auswirft?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bastler65 schrieb:

> Danke für eure Hilfe. Ich habe (glaub ich) mein Problem gefunden, ein
> typischer Anwendungsfehler:

Yep.
Du hast Warnungen ignoriert.

> Mein Include der stdlib.h stand in einem ifdef-Bereich. Dadurch hat er
> irgend eine andere strtoul verwendet die immer eine 1 oder 0
> zurückgeworfen hat.

Nein. Der hat schon den richtigen strtoul benutzt.
Aber der Compiler kann sich nicht aus den Fingern saugen, dass strtoul 
einen long liefert. ALso greifen Standardmassnahmen: der Compiler nimmt 
an, dass strtoul einen int liefert.

> Mit kleinen Werten kat komischerweise atoi
> einwandfrei funktioniert.

(du meinst atol)

logisch. Wobei: Es hat auch nicht wirklich funktioniert. Es hat für dich 
nur so ausgesehen. Aber mach das ein paar tausend mal und du killst dir 
damit wunderbar deinen Stack :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.