char zu int umwandeln

Gast #4813103
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.
Gast #4813209
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.
Gast #4813306
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'.
#4815681
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.
#4815994
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"
Persönliche Seite #4816006
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 ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren