Forum: Compiler & IDEs char zu int umwandeln


von mala (Gast)


Lesenswert?

Hallo.
Ich versuche eine empfangenen char als einen Integer wert zu nutzen.



while  (vw_get_message(message,&messageLength)){
     Serial.println((char*)message);

    }

   tone (poli,(char*)message,300);

Das war nur ein Gedanke von mir, welcher nicht funktioniert :(
Könnte mich jemand mit Wissen bereichern, um dieses Problem zu lösen?

:D
Ma.

: Verschoben durch Moderator
von Peter II (Gast)


Lesenswert?

was meinst du mit char?

soll eine '1' eine 1 werden
oder soll ein '1' eine 49 werden?

von heike (Gast)


Lesenswert?

ja also die sie sollen von '1' zu 1

von Joachim B. (jar)


Lesenswert?

und was soll aus einer "123456789" werden

Es kommt ja offensichtlich ein Array of char

von Dirk B. (dirkb2)


Lesenswert?

Wenn es ein C-String ist kannst du atoi oder strtol nehmen.
Bei nur einem char geht *message-'0'

von Joachim B. (jar)


Lesenswert?

was machst du mit anderen Zeichen?

Ist die gesendete Länge immer 1?
woran erkennst du das Ende?

von Huh (Gast)


Lesenswert?

heike schrieb:
> ja also die sie sollen von '1' zu 1
Ist ja schön zu wissen, was du willst.
Aber was will 'mala'?

Oder postest du etwa unter mehreren Namen hier? ;-)

von heike (Gast)


Lesenswert?

Also eigentlich habe ich (mala :D)einen Sensor am rf Sender der den Wert 
also eine String (von 0-1000 ) zu diesem empfänger sendet.
Der soll den Wert dann weiter zB. an den Piezo geben.

von Manoman (Gast)


Lesenswert?

Ich bereichere dich gerne und offen: was dir fehlt sind die Grundlage 
der Informatik.

Wenn du nicht in der Lage bist, ein solches "Problem" selbst zu lösen - 
aber immerhin die Zeit&Nerven hast, hier danach zu fragen - würde ich an 
deiner Stelle den Beruf(-swunsch) überdenken oder wenigstens besagte 
Gundlagen nachholen; aber auf jeden Fall: mich trollen.

von Dirk B. (dirkb2)


Lesenswert?

Dirk B. schrieb:
> Wenn es ein C-String ist kannst du atoi oder strtol nehmen.

Bedenke aber, dass ein C-String Nullterminiert ist.
Allerdings brechen die Funktionen auch beim ersten nicht-int-Zeichen ab.

von Flix (Gast)


Lesenswert?

mala schrieb:
> Hallo.
> Ich versuche eine empfangenen char als einen Integer wert zu nutzen.
>
> while  (vw_get_message(message,&messageLength)){
>      Serial.println((char*)message);
>
>     }
>
>    tone (poli,(char*)message,300);
>
> Das war nur ein Gedanke von mir, welcher nicht funktioniert :(
> Könnte mich jemand mit Wissen bereichern, um dieses Problem zu lösen?
>
> :D
> Ma.


du castest ja den pointer "message" nach einen pointer mit Datentyp 
char.

tut erst mal nicht viel zur Sache, wie du castest, damit hast du nur die 
Schrittweite des pointers auf ein Byte beschränkt.

Wichtig ist es, wie man die Daten, auf die der Pointer zeigt, 
interpretiert.

die müssen z.B. bei printf mit printf("%s", &message) aufgerufen werden.

Oder bei einem Charakter mit printf("%c", message).


Ansonsten kannst du von einem ASCII-Zeichen '1' z.b., von dessen 
numerischen Wert 0x30 abziehen (Offset), dann hast du eine numerische 1.

Genauso bei den ASCII-Zeichen '0' - '9'.

von Flak (Gast)


Lesenswert?

Flix schrieb:
> Ansonsten kannst du von einem ASCII-Zeichen '1' z.b., von dessen
> numerischen Wert 0x30 abziehen (Offset), dann hast du eine numerische 1.

Woher weisst du, dass es sich um ASCII-Zeichen und nicht um EBCDIC 
handelt ;-)

von Rolf M. (rmagnus)


Lesenswert?

Flak schrieb:
> Flix schrieb:
>> Ansonsten kannst du von einem ASCII-Zeichen '1' z.b., von dessen
>> numerischen Wert 0x30 abziehen (Offset), dann hast du eine numerische 1.
>
> Woher weisst du, dass es sich um ASCII-Zeichen und nicht um EBCDIC
> handelt ;-)

Deshalb macht man einfach:

Dirk B. schrieb:
> Bei nur einem char geht *message-'0'

Das funktioniert immer, solange der Zeichensatz der ankommenden Zeichen 
der selbe ist, wie das "execution character set" des Compilers.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Flak schrieb:
> Woher weisst du, dass es sich um ASCII-Zeichen und nicht um EBCDIC
> handelt

Wie groß ist die Wahrscheinlichkeit, im realen Leben jemals außerhalb 
einer Informatiklehrveranstaltung damit konfrontiert zu werden?

von Rolf M. (rmagnus)


Lesenswert?

Rufus Τ. F. schrieb:
> Flak schrieb:
>> Woher weisst du, dass es sich um ASCII-Zeichen und nicht um EBCDIC
>> handelt
>
> Wie groß ist die Wahrscheinlichkeit, im realen Leben jemals außerhalb
> einer Informatiklehrveranstaltung damit konfrontiert zu werden?

In den 80ern ist man ähnlich mit der Idee umgegangen, dass es mal ein 
Jahr 2000 geben könnte. Und dann hat man haufenweise Entwickler mit 
fürstlicher Bezahlung aus dem Ruhestand holen müssen. Gut - für die 
Entwickler selbst war das natürlich sehr schön.
Was ich damit sagen will: Es ist besser Annahmen zu vermeiden, die man 
nicht unbedingt treffen muss. Wie heitß es so schön? "Assumption is the 
mother of all fuck ups"

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Rolf M. schrieb:
> Es ist besser Annahmen zu vermeiden, die man nicht unbedingt treffen
> muss.

Gewiss. Das aber im Kontext mit einer obsoleten und besonders lausigen 
Zeichencodierung zu erwähnen, halte ich für ... spannend.

Der Siegeszug von ASCII und allen darauf aufbauenden Zeichencodierungen 
(was immerhin Unicode mit all' seinen Schattierungen mit einbezieht) ist 
nichts neues.

Ansonsten: Man sollte im Code hinschreiben, was man erreichen will, d.h. 
man schreibt '0' statt 0x30. Egal, welche Zeichencodierung verwendet 
wird.

Wobei auch das eine Grundannahme trifft, nämlich daß die Zeichen '0'-'9' 
in der verwendeten Zeichencodierung streng monoton ansteigend angeordnet 
sind.

Wenn man schon EBCDIC nicht ausschließt, sollte man auch davon ausgehen, 
daß das anders sein könnte ...

von Rolf M. (rmagnus)


Lesenswert?

Rufus Τ. F. schrieb:
> Wobei auch das eine Grundannahme trifft, nämlich daß die Zeichen '0'-'9'
> in der verwendeten Zeichencodierung streng monoton ansteigend angeordnet
> sind.

Solange deine Zeichenketten im Execution Character Set sind, ist das 
nach ISO-C-Norm garaniert.

von Dirk B. (dirkb2)


Lesenswert?

Rufus Τ. F. schrieb:
> Wobei auch das eine Grundannahme trifft, nämlich daß die Zeichen '0'-'9'
> in der verwendeten Zeichencodierung streng monoton ansteigend angeordnet
> sind.

Zumindest bei C wird das vom Standard verlangt.

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
Noch kein Account? Hier anmelden.