Forum: Compiler & IDEs Pointer Daten rausholen


von Richard B. (rbrose)


Lesenswert?

Hallo zusammen,

hab folgendes Problem:
1
uint8_t checkNumber(unsigned char* data)
2
{
3
  uint8_t tmpShowNumber[3];
4
  uint8_t foundMinus=0;
5
  for(unsigned char i=0; i<15;i++)
6
  {      
7
    if(foundMinus)
8
    {
9
      tmpShowNumber[0] = data[i];
10
      tmpShowNumber[1] = data[i+1];
11
      tmpShowNumber[2] = data[i+2];
12
      tmpShowNumber[3] = '\0';
13
      
14
15
      uart_putc(data[i]);  
16
      uart_putc(tmpShowNumber[0]);  
17
                    
18
      break;
19
    } 
20
    if(data[i] == '-') 
21
    {      
22
      foundMinus = 1;  
23
    }
24
  }
25
  return 0;
26
}

Wieso unterscheiden sich uart_putc(data[i]); und 
uart_putc(tmpShowNumber[0]);?

Bei data[i] kriege ich '2' und bei tmpShowNumber[0] kriege ich nur Müll.
Was mach ich falsch?

von yalu (Gast)


Lesenswert?

Du definierst ein Array mit 3 Elementen:

  uint8_t tmpShowNumber[3];

und schreibst 4 Werte hinein:

      tmpShowNumber[0] = data[i];
      tmpShowNumber[1] = data[i+1];
      tmpShowNumber[2] = data[i+2];
      tmpShowNumber[3] = '\0';

Könnte, aber muss nicht der Grund sein. Auf jeden Fall solltest du das
korrigieren.

Nebenbei: Hat es einen bestimmten Grund, warum du manchmal unsigned
char und manchmal uint8_t benutzt?

von Richard B. (rbrose)


Lesenswert?

Hi,

naja muss mich an eins halten ;-)

Beginnt er nicht bei 0 an zu zählen?

0 1 2 3  -> sind 4 Werte.

von Jan M. (mueschel)


Lesenswert?

Richard B. wrote:
> Beginnt er nicht bei 0 an zu zählen?
> 0 1 2 3  -> sind 4 Werte.

Schon, aber [3] ist die Anzahl, nicht die Nummer des höchsten Elements.

von yalu (Gast)


Lesenswert?

> Beginnt er nicht bei 0 an zu zählen?

Ja (wer auch immer ;-)).

> 0 1 2 3  -> sind 4 Werte.

Genau. Deswegen muss oben stehen:

  uint8_t tmpShowNumber[4];
                        ^

von Richard B. (rbrose)


Lesenswert?

Ok das war das Problem ... danke.

Hab jetzt nur doch das Problem:
1
  uint16_t number1=0;
2
3
  tmpShowNumber[0] = '2';
4
  tmpShowNumber[1] = '3';
5
  tmpShowNumber[2] = '4';
6
  tmpShowNumber[3] = '\0';
7
8
  number1 = atoi(tmpShowNumber);
9
10
  char buffer[7];
11
  itoa( number1, buffer, 10);              
12
13
  uart_putc(buffer);

Wieso bekomme ich bei uart_putc(buffer); im Terminal < (in Hex 3C) zu 
sehen? Und nicht 234?

von yalu (Gast)


Lesenswert?

Weil uart_putc() ein Zeichen als Argument erwartet, du aber ein Array
von Zeichen übergibst. Probier mal
1
  uart_putc(buffer[0]);
2
  uart_putc(buffer[1]);
3
  uart_putc(buffer[2]);

von Karl H. (kbuchegg)


Lesenswert?

....
oder schreib dir eine Funktion für die Stringausgabe
(die wirst du auf lange Sicht sowieso brauchen)
1
void uart_puts( const char* String )
2
{
3
  while( *String ) {
4
    uart_putc( *String );
5
    String++;
6
  }
7
}

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.