Forum: Compiler & IDEs Char in Integer wandeln


von karsten (Gast)


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?
1
void Set_XYZ()
2
{
3
 unsigned char command[4] = "???";
4
 unsigned char data1[6] = "000000";
5
 unsigned char data2[6] = "000000";
6
 unsigned char data3[6] = "000000"; 
7
 unsigned int data1int = 0;
8
 unsigned int data2int = 0;
9
 unsigned int data3int = 0;
10
11
 if (strlen(uart_string) >= 3)
12
 {
13
  for(unsigned int i = 0; i < 3;i++) //command lesen
14
  {
15
   command[i] = uart_string[i];  
16
  };
17
  if (strlen(uart_string) >= 9)
18
  {
19
   for(unsigned int i = 0; i < 6;i++) //data 1 lesen
20
   {
21
    data1[i] = uart_string[i+3];  
22
   };
23
   if (strlen(uart_string) >= 15)
24
    {
25
    for(unsigned int i = 0; i < 6;i++) //data 2 lesen
26
    {
27
     data2[i] = uart_string[i+9];  
28
    };
29
    if (strlen(uart_string) >= 21)
30
     {
31
     for(unsigned int i = 0; i < 6;i++) //data 3 lesen
32
     {
33
      data3[i] = uart_string[i+15];  
34
     };
35
     data3[6] = '\0';
36
     data3int = (int)data3;
37
     //uart_puts (data3);
38
    }; //comannd + datas1 + datas2 + datas3
39
    data2[6] = '\0'; 
40
    data2int = (int)data2;
41
    //uart_puts (data2);
42
   }; //comannd + datas1 + datas2 
43
   data1[6] = '\0'; 
44
   data1int = (int)data1;
45
   uart_puts (data1);
46
  }; //comannd + datas1
47
  command[3] = '\0';
48
  //uart_puts (command);
49
 }; //comannd;
50
51
// tmpint = itoa(uart_string[3]);
52
 if( strcmp( command, "led" ) == 0 )
53
// if((uart_string[0] ==  'l') && (uart_string[1] ==  'e') && (uart_string[2] ==  'd'))
54
 {
55
  if(data1int == 0)
56
  {
57
  PORTD &= ~(1<<PD6); //ausschalten
58
  uart_puts ("ausschalten");
59
  }
60
  else
61
  {
62
  PORTD |= (1<<PD6); //einschalten
63
  uart_puts ("einschalten");
64
  }
65
  //PORTD ^= (1<<PD6); toggeln
66
 }
67
 uart_puts (uart_string);
68
}

gruß karsten

von asd (Gast)


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.

von karsten (Gast)


Lesenswert?

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

von DirkB (Gast)


Lesenswert?

karsten schrieb:
1
  unsigned char data1[6] = "000000";
2
  unsigned char data2[6] = "000000";
3
  unsigned char data3[6] = "000000";
4
...
5
  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.

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.