Hallo Leute, ic verzweifel seit gestern an einer simplen Lösung habe eigentlich auch schon (meiner Meinung nach) alles probiert. Ich möchte einfach per Hyperterminal eine Zahl einlesen und diesen Per ATmega8 weiterverarbeiten. Die Uart klappt wunderbar, allerding habe ich enorme Probleme beim Umwandeln meines Char-Arrays mit Nullterminierung (Enter) in eine einfache INT Variable. Die Eingegebene Zahl bzw die Eingegeben Zeichen sind in der Größenordnung 5000-10000 Also 4 oder 5 bytes... Warum bekomme ich die Zahl werder mit atoi oder mit irgendwelchen anderen berechnungen wie zb int a= 1000*charstring[0]+100*charstring[1]+10*charstring[2]+charstring[3] was mache ich seit falsch? Weiss jemand noch eine Möglichkeit die ich probieren könnte? Auch schon mit dem Casten versucht, allerdings spuckt mir mein compiler warnungen aus, wegen pointer und variable zu klein... Danke schon mal und schönen restabend... Elko
Ohne deinen Code zu sehen kann man nur raten. Gruss Helmi
>1000*charstring[0]+100*charstring[1]+10*charstring[2]+charstring[3] >was mache ich seit falsch? Du sendest ASCII! Deshalb musst du das vorher zurückwandeln und auf Überlüfe achten:
1 | u16Val = 1000 * ( (uint16_t) (charstring[0] - '0') ) |
2 | + 100 * ( (uint16_t) (charstring[1] - '0') ) |
3 | + 10 * ( (uint16_t) (charstring[2] - '0') ) |
4 | + ( (uint16_t) (charstring[3] - '0') ); |
So müsste es gehen, wenn die Variable 4stellig und wirklich nur aus Ziffern besteht... (Und kleiner als 65536 ist)
unsigned int read(const char *cp) { unsigned int result = 0; while (*cp) { result = result * 10 + *cp - '0'; cp++; } return result; }
Vielen Dank an alle... Die Lösung von Matthias klappt auf Anhieb, danke nochmal an dieser Stelle. Ich habe gestern die halbe Nacht versucht und hin und her gecastet und eigentlich auch genau das gemacht, nur an der Stelle ohne cast und subtrahierter '0' :-) Die FKT von Wolfgang habe ich leider nicht zum laufen bekommen... aufgerufen habe ich die Fkt mit: zahl = read((char*) string); wobei zahl unsigned int ist. Jedoch leider ohne Erfolg. Was lief da schief? Besten Dank für eure Mühe Gruss Elko
>Die FKT von Wolfgang habe ich leider nicht zum laufen bekommen... >aufgerufen habe ich die Fkt mit: zahl = read((char*) string); wobei zahl >unsigned int ist. Jedoch leider ohne Erfolg. Was lief da schief? Hat dein String auch eine 0 am Ende ? Das wuerde auch das nichtfunktionieren von atoi erklaeren. Gruss Helmi
Nabend, joa fands auch komisch, dass atoi nicht ging, aber ich denke, ich habe da irgendwas mit dem übergebenen Parameter vercheckt. habs ja jetzt am Laufen, aber ich würde ja schon gerne wissen, warum die Funktionen wie atoi oder itoa nicht wollten oder besser warum ich die nicht zum Laufen bekommen habe :-) kann mir vorstellen, dass ich das typecasten falsch gemacht hab, oder einfach nicht die Adresse von charstring übergeben hab, man(n) weiss es nicht :-) vielleicht könnte es ja so klappen... result = (int) atoi ((char *) & charstring); ?????? @Helmi: Ja ich initialiere mein charstring vorher mit: char string[5]={0,0,0,0,0}; beschreiben tue ich halt per Tastatureingabe nur die ersten 4 Stellen, also bis string[3] und dann per Enter die Nullterminierung. Da ich eigentlich aus dem Hause C++ für Win komme, möchte ich vorab gern nochmal klären, ob die Entertaste im Terminalprogramm ein 0x0D sendet (tuts eigentlich), also "\R\C" oder ein '\0' also 0 so wie in Win32-Applikationen. Oder ist das identisch? Besten Dank und schönen Abend ps: ich tu mit jetzt das hier mal an: Beitrag "String in Int umwandeln, damit rechnen und wieder zurückkonvertieren" Elko
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.