Char Array in Integer wandeln für If Schleife

Gast #1522823
Ich habe eine Temperaturdiode ausgelesen und die Daten in einem Char 
gespeichert in folgendem Format "23.5", nun möchte ich dieses Format als 
integer haben um sie so einfach mit einem vordefinierten Wert zu 
vergleichen zb. 25.

Jedoch bekomme ich die Char nicht ein Integer wert gewandelt mit, auf 
die Kommastelle kommt es mir nicht an, nur die ersten beiden sind 
wichtig :/ Meine Schleife funktioniert auch nicht wirklich.
1
if (temp_akt > 25)
2
   PORTA = 0x80
3
else
4
   PORTA = 0x00

Jemand ein Tipp wie ich dieses Problem sonstwie lösen könnte?!
Sprache ist MicroC.
Gast
Hi
Vermutlich gibt es so einfache Konvertierung wie z.B.
in Pascal x:=StrToInt("123") nicht. Daher die Frage, auf welchem System? 
Im Prinzip geht es auch folgendermaßen:
Eine Zahl als Char ist um 48 größer. Also, der Wert des Bytes - 48 
ergibt die Zahl. Nun nur noch die Stelle bewerten, also einer mal eins, 
Zehner mal 10 etc. Das ganze dann addieren und du hast den Integerwert.
gruß oldmax
Was spricht gegen atoi?
1
#include <stdlib.h>
2

3
int main()
4
{
5
  char tmp[] = "23.5";
6
  int i;
7

8
  i = atoi( tmp );
9
}

atoi hört mit dem Dezimalpunkt zu wandeln auf. Eigentlich hört es an der 
Stelle auf, an der im String nichts mehr kommt, was zu einem int gehören 
kann. Bei dir ist das dann eben der '.'


Und kauf dir ein C-Buch.
Was du da daher radebrechtest, geht ja auf keine Kuhhaut.
Gast
Karl heinz Buchegger schrieb:
> Und kauf dir ein C-Buch.
>
> Was du da daher radebrechtest, geht ja auf keine Kuhhaut.



Danke dir :D

Ja werde ich beherzigen, hatte C damals sogar mal sehr gut gekonnt, 
hatte auch zwei, drei Taschenbücher über C von M&T... muß ich echt mal 
wieder raussuchen. Ist leider alles schon ein paar Jahre her.

Übrigens hat es mit atoi wunderbar geklappt.

Übrigens rückwärts geht es mit itoa leider nicht, MicroC gibt den befehl 
leider nicht her :/ Hab es dann mit sprintf gelößt, welches wiederrum 
meine Hex auf über 14kb anschwillen ließ. Dies hab ich wiederrum mit 
sprinti in den Griff bekommen - zwar nicht schön, aber geht.
Draco schrieb:

> Übrigens rückwärts geht es mit itoa leider nicht, MicroC gibt den befehl
> leider nicht her :/ Hab es dann mit sprintf gelößt, welches wiederrum
> meine Hex auf über 14kb anschwillen ließ. Dies hab ich wiederrum mit
> sprinti in den Griff bekommen - zwar nicht schön, aber geht.

http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
Gast
-.- Ja sorry :D

Nun hab ich da aber wieder ein blödes Problem was mich ein wenig Nerven 
kostet, er übernimmt einfach nicht den Wert für die Variable 
temp_select, was mache ich da falsch?! Er springt bei Knopfdruck in die 
erste Abfrage, gibt den Stern auch aus, aber überschreibt die Variable 
nicht, somit geht er auch nicht in die zweite Abfrage. :/

Es ist ja nun nicht so das ich nicht lernwillig bin :D Deswegen 
entschuldige ich mich für generve hier!
1
     int temp_select = 1;
2

3
...
4

5
     if (Button(&PINC, 0, 1, 1) && temp_select == 1) {
6
        Lcd_Out(2,3,"*");
7
        Lcd_Out(2,6," ");
8
        temp_select = 2;
9
     }
10

11
     if (Button(&PINC, 0, 1, 1) && temp_select == 2) {
12
        Lcd_Out(2,3," ");
13
        Lcd_Out(2,6,"*");
14
        temp_select = 3;
15
     }
16

17
     if (Button(&PINC, 0, 1, 1) && temp_select == 3) {
18
        Lcd_Out(2,3," ");
19
        Lcd_Out(2,6," ");
20
        temp_select = 1;
21
     }
22

23
...
Draco schrieb:

> Nun hab ich da aber wieder ein blödes Problem was mich ein wenig Nerven
> kostet, er übernimmt einfach nicht den Wert für die Variable
> temp_select, was mache ich da falsch?! Er springt bei Knopfdruck in die
> erste Abfrage, gibt den Stern auch aus, aber überschreibt die Variable
> nicht, somit geht er auch nicht in die zweite Abfrage. :/

Ich bin mir ziemlich sicher, dass temp_select korrekterweise den 
richtigen Wert zugewiesen bekommt. Dein Problem muss an einer anderen 
Stelle liegen.
Nur kann man das mit einem kurzen Codeausschnitt nicht weiter eingrenzen
Gast
Jep, problem lag woanders. Es war einfach ein Zeitproblem. Mit einem 
Delay von ca. 100ms geht es nun reibungslos.

Er rechnet so schnell die Tastenabfrage durch, das man garnicht gesehen 
hat das sich da was änderte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.