Pointer Daten rausholen

OP #787442
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?
Gast #787468
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?
Gast #787487
> 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];
                        ^
OP #787495
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?
Gast #787500
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]);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.