Forum: Compiler & IDEs Int Array beschreiben


von Ralf (Gast)


Lesenswert?

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
1
 signed int Wert[5];
2
 char inLine[5];
3
4
 unsigned int by,i;
5
6
void test(void)
7
{
8
  for(i=0; i<5; i++)
9
   {
10
     by=inLine[i];
11
     Wert[i]=by;
12
   }
13
}

von oder so (Gast)


Lesenswert?

[c]
 int Wert[5];
 char inLine[5];

void test(void)
{
  for(int i=0; i<5; i++)
   {

     Wert[i]=inLine[i];
   }
}

von Martin S. (drunkenmunky)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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;

von Martin S. (drunkenmunky)


Lesenswert?

Dann solltest du deine ASCII Zeichen erst mal in int wandeln.
Dafür gibt es meist schon fertige Funktionen. Schau mal nach atoi()

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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.
1
 signed int Wert[5];
2
 char inLine[5];
3
4
5
6
void test(void)
7
{
8
   int aWert = atoi( &inLine[1]); //Wandle ascii nach int
9
   Wert[1] = aWert;
10
}

von Ralf (Gast)


Lesenswert?

halt verschrieben:

1
 signed int Wert[5];
2
 char inLine[5];
3
4
5
6
void test(void)
7
{
8
   int aWert = atoi( &inLine[0]); //Wandle ascii nach int
9
   Wert[1] = aWert;
10
}

von Martin S. (drunkenmunky)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

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.