2011-11-17 19 views
5

Voglio convertire il numero da char * in 32 bit intero int32_t, ma strtol() restituisce long.Il modo giusto per convertire il char * numero in int32_t

Non so lunga parte della mia macchina. Potrebbe essere 32 o 64 bit o qualcos'altro in futuro.

Qual è il modo corretto e antiproiettile per convertire la stringa in intero 32 bit int32_t? O per convertire da long a int32_t.

Il confronto con le costanti _MAX e _MIN è l'unico e più semplice?

+0

Cosa c'è di sbagliato con 'sprintf ("% i ", ...)'? Non gestisce automaticamente i sistemi a 32/64 bit in modo corretto? – Polynomial

+0

Polinomiale, il problema è che% i non corrisponde a int32_t. Ad ogni modo, la risposta corretta è sotto. –

risposta

10

Utilizzare sscanf con uno dei macro identificatori di formato da <inttypes.h>, ad es. SCNd32 o SCNi32:

int32_t i; 
sscanf(str, "%"SCNd32, &i); 

Questi sono disponibili dal C99.

+1

Grazie! Non lo sapevo. È possibile trovare un elenco in http://www.dinkumware.com/manuals/?manual=compleat&page=inttypes.html#SCNd8. – glglgl

+0

+1 Cancellerò il mio post ora :) – INS

+0

Grazie mille! –

0
char *buf; 
long val; 
.... 
if (1 == sscanf(buf, "%ld", &val)) 
{ 
    // success! 
    // now we have the data in a long, can do some boundary checking and then put it in an int32_t. 
} 
... 
Problemi correlati