convertire solo una parte di array char in intero

Buongiorno,
vorrei convertire un array di char 'data 190420' dove con 19, si indicherà il giorno, con 04 il mese e con 20 l'anno.
purtroppo l'atoi cosi non funziona: giorno1 = atoi(char[6]); volevo mi stampasse 1 ed invece l'atoi converte a 0, come se stesse leggendo lettere e non numeri..
non riesco proprio a risolverlo

ciao,

allora 190420 sono 6 caratteri...quindi l'array dovrà essere almeno lunga 7 (6 caratteri + 0x00 di terminazione)...quindi l'indice andrà da 0 a 5 per i caratteri "validi" mentre la èosizione 6 sraà sempre 0x00...ed infatti al atoi() dice:

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed and zero is returned.

Scusa è, ma sai cosa fa la atoi()? ...

The atoi() function converts the initial portion of the string pointed to by s to integer representation.

... ti sembra che gli stai passando una stringa terminata da 0x00?

NO, tu stai passando un CHAR ovvero un singolo elemento (oltretutto con una sintassi che dovrebbe dare errore)!!!

Comunque, basta sapere come sono codificati in numeri in ASCII e non serve alcuna funzione ...
... i numeri vanno da 0x30 ('0') a 0x39 ('9') quindi quando hai un CHAR che contiene un numero espersso in ASCII basta che sottrai 0x30 e nel carattere rimane il valore numerico equivalente quindi, volendo mettere in una variabile, nel tuo caso se un campo, che chiamiamo data, contiene il valore "data 190420" basta semplicemente scrivere:

giorno1 = data[5] - 0x30;

Guglielmo

P.S.: Oltre a tutto quanto ha scritto giustamente ORSO2001 assieme a me ... :wink:

avevo un dubbio ed ho provato; questa scrittura da errore :

atoi(char[6]);

dovrebbe essere:

atoi(char+6);

PS:esattammente come dice Guglielmo...con char[6] gli passi un carattere...

Ottimo, ho risolto in entrambi i modi. Grazie ORSO e Gpb :slight_smile: