Datum:
ich möchte gern ein Array namens Wert befüllen. in meinem Array inLine stehen verschiedene werte drin den möchte ich nun in das Array Wert kopieren. es sollte dan im Array Wert dann so aussehen, Wert[1]=-125; Wert[2]=+125; Wert[3]=-122; Wert[4]=-133; Wert[5]=-145; Die werte die in inLine drinstehen kommen von der uart. vielleicht kann mir von euch einer weiterhelfen denn so wie ich das jetzt in der funktion hab gehts glaub ich nicht. mfg
signed int Wert[5]; char inLine[5]; unsigned int by,i; void test(void) { for(i=0; i<5; i++) { by=inLine[i]; Wert[i]=by; } } |
Datum:
[c]
int Wert[5];
char inLine[5];
void test(void)
{
for(int i=0; i<5; i++)
{
Wert[i]=inLine[i];
}
}
Datum:
Warum machst du Wert als int? Hier reicht doch dann auch char. Die Variable by ist unnötig. Wieso machst du nicht direkt: Wert[i]=inLine[i]; Ich bezweifle mal, dass in inLine[4] und inLine[5] Werte kleiner -128 drin steht. Signed char geht nur von -128 bis 127. Ansonsten müsste es so funktionieren.
Datum:
Ralf schrieb: > Die werte die in inLine drinstehen kommen von der uart. Wie genau 'kommen sie von der UART'. Hast du an dieser Stelle einen Text vor dir, "abc", "mikrocontroller" oder eben auch den Text "+68" oder hast du da bereits richtige Zahlen mit denen man rechnen kann? > vielleicht kann mir von euch einer weiterhelfen denn so > wie ich das jetzt in der funktion hab gehts glaub ich nicht. Prinzipiell schon. WENN du in inLine bereits Zahlen hast und nicht nur einen Text. Aber ich vermute mal, dein eigentliches Problem besteht darin, dass du einen Text vor dir hast, den du erst mal in eine richtige Zahl umwandeln musst.
Datum:
also es wird 5mal an die uart gesendet als ascii zeichen,ich wollte nun die werte die empfangen wurden in ein array legen,zb Wert1=empfang1,....Wert5=empfang5 und so sollte es nachher drin stehen Wert[1]=-125; Wert[2]=+125; Wert[3]=-122; Wert[4]=-133; Wert[5]=-145;
Datum:
Dann solltest du deine ASCII Zeichen erst mal in int wandeln. Dafür gibt es meist schon fertige Funktionen. Schau mal nach atoi()
Datum:
Ralf schrieb: > also es wird 5mal an die uart gesendet als ascii zeichen,ich wollte nun > die werte die empfangen wurden in ein array legen,zb > Wert1=empfang1,....Wert5=empfang5 und so sollte es nachher drin stehen > Wert[1]=-125; > Wert[2]=+125; > Wert[3]=-122; > Wert[4]=-133; > Wert[5]=-145; Dann lautet die korrekte Fragestellung: Wie kann ich den Text "-125 +125 -122 -133 -145" so zerlegen, dass ich * die einzelteile als einzelne Strings vor mir habe * die einzelnen Strings "-125" "+125" "-122" "-133" "-145" dann in tatsächliche Zahlen verwandelt werden. Bis zu diesem Schritt hast du es mit Texten zu tun. So wie "Ralf" auch einfach nur ein Text ist. Nur dass halt dein Text 'zufällig' wie eine Zahl aussieht. PS: Ich bezweifle ernsthaft, dass du den kompletten Text für alle 5 Zahlen in einem char Array der Länge 5 unterbringst. Dir scheint nicht klar zu sein, dass du es momentan einfach nur mit einem Text zu tun hast. Lass dich nicht davon täuschen, dass der wie eine Zahl aussieht. Er ist keine. Er ist erstmal nur ein Text - ein String.
Datum:
So müsste es gehen, wenn ich denn ascii wert +125 habe wird ja mithilfe von atoi anstelle des + ein Leerzeichen gesetzt, gehe ich richtig in der annahme.
signed int Wert[5]; char inLine[5]; void test(void) { int aWert = atoi( &inLine[1]); //Wandle ascii nach int Wert[1] = aWert; } |
Datum:
halt verschrieben:
signed int Wert[5]; char inLine[5]; void test(void) { int aWert = atoi( &inLine[0]); //Wandle ascii nach int Wert[1] = aWert; } |
Datum:
Dir fehlen da viele Grundlagen... Ein Zeichen von deiner UART benötigt ein Char (8-bit) Platz. Eine Zahl so wie du sie sendest braucht dann 3 oder 4 char. Es bringt also wenig nur eine Ziffer oder das Vorzeichen in einen int Zahl zu wandeln. Du solltest dir Trennzeichen zwischen den Zahlen überlegen. Dann kannst du leichter feststellen wann eine Zahl anfängt. Den Text als ASCII Zeichen speicherst du dann in inLine (nur eine Zahl) und wandelst ihn dann mit atoi.
Datum:
Ralf schrieb: Das: > Wert[1]=-125; > Wert[2]=+125; > Wert[3]=-122; > Wert[4]=-133; > Wert[5]=-145; und das: > signed int Wert[5]; passt schon nicht zusammen. Man zählt die Indices von 0 bis N-1, also von 0 bis maximal 4. Der Zugriff auf Wert[5] ist nicht definiert.