Go Down

Topic: String of data in een Array krijgen (Read 348 times) previous topic - next topic

helmuteke

ik heb met een omweg het al geprobeerd in  de algemene secties maar zonder resultaat  mss kunnen jullie me helpen in mijn moedertaal.

effe uitleggen wat ik heb

ik heb een
char buffer[516];

welke gevuld is met data
als ik de buffer weergeef krijg ik dit

0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255

wat ik nu zou wensen is een array waarbij

int data[0] = 0
int data[1] = 0
int data[3] = 255
int data[4] = 255

enzo voort

wat ik al geprobeerd heb is dit

Code: [Select]

for( str = strtok_r(buffer, "," ,&p);
       str;
       str = strtok_r(NULL, "," , &p)
       )
       {
        Serial.println(str);
      // data[i] = str;
      i++;
       }


maar dan krijg ik fout van
Code: [Select]
standv3:66: error: invalid conversion from 'char*' to 'long int'

kan iemand me op de goede weg brengen


nicoverduin

Je moet eerst die stukjes tussen de komma kopieren naar een veld[4]. Vervolgens zet op veld[3] een '\0';.
Dan heb je weer een terminated string en kun je de functie atoi() gebruiken. Die zet de string om in een. Daar het veld kennelijk nooit groter dan 255 kan worden kun je ook volstaan met een uint8_t veld (- 1 byte lang unsigned).
Je kan het ook nog slimmer aanpakken door een strtok te doen op de  komma en die dan te vervangen door een \0. Dan heb je in de buffer gelijk de terminated string staan. Je begin positie is dan het begin van de string.
Daarna zet je de volgende begin positie op de \0 plek +1 en begin je opnieuw. Nadeel is dat als je klaar bent, er geen comma's meer in de buffer staan maar \0 op de plek van de komma.
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl

Go Up