Int Array beschreiben

Gast #2665820
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
}
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.
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.
Gast
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;
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.
Gast
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
}
Gast
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
}
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.