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
was meinst du mit char? soll eine '1' eine 1 werden oder soll ein '1' eine 49 werden?
und was soll aus einer "123456789" werden Es kommt ja offensichtlich ein Array of char
Wenn es ein C-String ist kannst du atoi oder strtol nehmen. Bei nur einem char geht *message-'0'
was machst du mit anderen Zeichen? Ist die gesendete Länge immer 1? woran erkennst du das Ende?
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? ;-)
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.
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.
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.
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'.
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 ;-)
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.
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?
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"
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 ...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.