String of data in een Array krijgen

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

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

standv3:66: error: invalid conversion from 'char*' to 'long int'

kan iemand me op de goede weg brengen

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.