Ascii in Zahl Wandeln in C ?

lastyle

Neues Mitglied
20. Feb. 2011
7
0
0
Sprachen
Hallo zusammen,

ich habe im AVRSTUDIO unter C folgendes Problem.

Als ausgangsvariable habe ich einen Temperaturwert, sagen wir mal 21,3 grad
dieser Wert liegt mir als double vor.

ich wandle diesen wert in einen char

char ascii[10];
dtostrf(temp,3,1,ascii)

danach hole ich mir die einzelnen Zahlen

char seg0[1];
char seg1[1];
char seg2[1];
strncpy(seg0, ascii , 1);
strncpy(seg1, ascii +1, 1);
strncpy(seg2, ascii +3, 1);

jetzt muss ich aber die Zahlen seg0 bis seg2 wieder zurückwandeln in
uint8_t , also z.B. von "1" in 1

wer kann mir hier den entsprechenden Denkanstoss liefern ?
 
Hi Mario,

wie das in Basic/Bascom geht ist schon klar, ich brauch aber gcc :)
naja ... ok ... ich dachte weil ...

wer kann mir hier den entsprechenden Denkanstoss liefern ?
das du da grad nen kleinen Hänger hast und nicht auf den Befehl gekommen bist.
Da die Funktionen/Befehle in den Sprachen eigentlich alle recht ähnlich heißen
hab ich gehofft das es die "Denkblockade" behebt :D ;)

Aber dann kann ich dir in C leider wohl nicht weiterhelfen ...

Gruß
Dino
 
Hallo Dino,

die Idee war gut, ich bin mir sogar sicher das es in C eine funktion dafür gibt, nur kenn ich sie leider nicht.

Trotzdem danke

Gruß Mario
 
Hallo Mario,

wenn du eine Dezimalstelle als Ascii Code hast, musst du eigentlich nur '0' oder 0x30 oder 48d davon abziehen, dann hast du die äquivalente Zahl als uint8_t.


Vielleicht hilft dir das weiter.

Grüße,
Dirk
 
Hallo Mario,

wenn du eine Dezimalstelle als Ascii Code hast, musst du eigentlich nur '0' oder 0x30 oder 48d davon abziehen, dann hast du die äquivalente Zahl als uint8_t.


Vielleicht hilft dir das weiter.

Grüße,
Dirk

Hallo Dirk,

ja auf die Idee bin ich auch schon gekommen aber es der Compiler meckert rum weil ich es nicht auf die Reihe bekomme den richtigen definitionswert zu finden.

Ich habs mit

uint8_t tempseg;
tempseg = lValue(seg0) --0x30;

und mit

uint8_t tempseg;
tempseg = seg0 --0x30;

versucht aber ich bekomme immer wieder die Fehlermeldung (seg0 enthält aktuell die "1")

../measure.c:169: error: lvalue required as decrement operand

was das heisst ist soweit klar nur weiss ich nicht wie ich die lvalue definieren soll.
 
Hallo Mario,

seg0 ist eigentlich ein Array vom Typ char mit der größe 1.

Es müsste also folglich so funktionieren:

tempseg = seg0[0] - 0x30; // oder: tempseg = seg0[0] - '0';


Dirk
 
Mario,

jetzt habe ich leider einen falschen Button gedrückt und deinen letzten Beitrag geändert, eigentlich wollte ich drauf antworten (zitieren) :rolleyes: Kommt davon wenn der Kleine immer um einen herum ist :D

Sorry.

probiere mal folgendes

display_show(0, seg0[0] - 0x30);


Grüße,
Dirk
 
Im Grunde ist das ganz simpel unter Verwendung von sprintf().

z.B.: ein float-Wert kann mit sprintf(buf, "%.f", wertfloat) in einen char-buffer gewandelt werden.
Falls die nötigen Libs nicht verfügbar sind kann man auch

sprintf(buf, "%2d,%1d", wertfloat / 10, wertfloat % 10) verwenden.

Michael
 
Mario,

jetzt habe ich leider einen falschen Button gedrückt und deinen letzten Beitrag geändert, eigentlich wollte ich drauf antworten (zitieren) :rolleyes: Kommt davon wenn der Kleine immer um einen herum ist :D

Sorry.

probiere mal folgendes

display_show(0, seg0[0] - 0x30);


Grüße,
Dirk

Hi Dirk,

macht rein garnichts, denn DAS wars.

Ich war gerade noch am testen ob nicht doch eventuell die \0 von strncpy mir das wandeln versauen, Obwohl die wegen dem definierten seg0[1] ja garnicht auftauchen konnten.

Vielen lieben Dank

Gruß Mario
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)