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
laa4 = strtoul(arr,NULL,10); würde ich mal behaupten ist prima.
laa3 = atol(arr); geht übrigens auch, die nehme ich aber üblicherweise nicht (man kann nicht kontrollieren, ob das Konvertieren geklappt hat)
Bastler65 schrieb:
> Kann mir jemand meine Augen öffnen?
Dir werd' ich die Augen öffnen!
Hallo, Danke für deine Antwort, aber leider steht nach der Konvertierung in laa4 nur eine 1! Gruß Bastler65
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?)
1 | laa3 = atol(arr); |
2 | laa4 = strtoul(arr,NULL,10); |
3 | 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?
Sven P. schrieb:
>
1 | > laa3 = atol(arr); |
2 | > laa4 = strtoul(arr,NULL,10); |
3 | > laa5 = strtol(arr,NULL,10); |
4 | >
|
> > 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 ....
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
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.
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?
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 :-)
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.