mikrocontroller.net

Forum: Compiler & IDEs Char in Integer wandeln


Autor: karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

habe ein problem vom konvertieren von chars in integer.
versuche gerade über uart einen text zu senden.
darin enthalten (erste 3 zeichen, "command") ist das kommando was zu tun 
ist.
im letzten teil (4-10tes zeichen, "datas1", 000020 = 20) wird ein 
integer übertragen.
nur leider kriege ich den char nicht zu einem integer konvertiert.
kann mir da einer helfen?
void Set_XYZ()
{
 unsigned char command[4] = "???";
 unsigned char data1[6] = "000000";
 unsigned char data2[6] = "000000";
 unsigned char data3[6] = "000000"; 
 unsigned int data1int = 0;
 unsigned int data2int = 0;
 unsigned int data3int = 0;

 if (strlen(uart_string) >= 3)
 {
  for(unsigned int i = 0; i < 3;i++) //command lesen
  {
   command[i] = uart_string[i];  
  };
  if (strlen(uart_string) >= 9)
  {
   for(unsigned int i = 0; i < 6;i++) //data 1 lesen
   {
    data1[i] = uart_string[i+3];  
   };
   if (strlen(uart_string) >= 15)
    {
    for(unsigned int i = 0; i < 6;i++) //data 2 lesen
    {
     data2[i] = uart_string[i+9];  
    };
    if (strlen(uart_string) >= 21)
     {
     for(unsigned int i = 0; i < 6;i++) //data 3 lesen
     {
      data3[i] = uart_string[i+15];  
     };
     data3[6] = '\0';
     data3int = (int)data3;
     //uart_puts (data3);
    }; //comannd + datas1 + datas2 + datas3
    data2[6] = '\0'; 
    data2int = (int)data2;
    //uart_puts (data2);
   }; //comannd + datas1 + datas2 
   data1[6] = '\0'; 
   data1int = (int)data1;
   uart_puts (data1);
  }; //comannd + datas1
  command[3] = '\0';
  //uart_puts (command);
 }; //comannd;

// tmpint = itoa(uart_string[3]);
 if( strcmp( command, "led" ) == 0 )
// if((uart_string[0] ==  'l') && (uart_string[1] ==  'e') && (uart_string[2] ==  'd'))
 {
  if(data1int == 0)
  {
  PORTD &= ~(1<<PD6); //ausschalten
  uart_puts ("ausschalten");
  }
  else
  {
  PORTD |= (1<<PD6); //einschalten
  uart_puts ("einschalten");
  }
  //PORTD ^= (1<<PD6); toggeln
 }
 uart_puts (uart_string);
}

gruß karsten

Autor: asd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Recht unübersichtlich dein Code...

>data3int = (int)data3;
Ai Ai Ai. Das ergibt höchstens den Wert des Pointers.

atoi() müsste passen, ansonsten SUCHFUNKTION BENUTZEN! Solche Anfragen 
gibts alle 2 Tage.

Autor: karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jepp, dank dir. jetzt gehts mit atoi. hatte ich schon getestet.
dank dir. p.s. habe gescuht ager nichts gefunden.

Autor: DirkB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
karsten schrieb:
  unsigned char data1[6] = "000000";
  unsigned char data2[6] = "000000";
  unsigned char data3[6] = "000000";
...
  data2[6] = '\0';
Knapp vorbei ist auch daneben.
Ein String mit 6 Zeichen braucht für 7 Zeichen Platz!
Warum lässt du nicht einfach die 6 Weg?

Und ein Element mit Index 6 gibt es bei dir auch nicht.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.