www.mikrocontroller.net

Forum: GCC Int Array beschreiben


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Ralf (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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
 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;
   }
}


Autor: oder so (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
[c]
 int Wert[5];
 char inLine[5];

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

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

Autor: Martin S. (drunkenmunky)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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;

Autor: Martin S. (drunkenmunky)
Datum:

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

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.
 signed int Wert[5];
 char inLine[5];



void test(void)
{
   int aWert = atoi( &inLine[1]); //Wandle ascii nach int
   Wert[1] = aWert;
}


Autor: Ralf (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
halt verschrieben:

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



void test(void)
{
   int aWert = atoi( &inLine[0]); //Wandle ascii nach int
   Wert[1] = aWert;
}

Autor: Martin S. (drunkenmunky)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Frank M. (ukw) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net