2011-11-17 10 views
5

Quiero convertir el número del formato char * al entero de 32 bits int32_t, pero strtol() devuelve long.Forma correcta de convertir el número * de char a int32_t

No sé cuánto tiempo tengo en mi máquina. Podría ser de 32 o 64 bits o algo más en el futuro.

¿Cuál es la forma correcta y a prueba de balas de convertir cadena a enteros de 32 bits int32_t? O para convertir largo a int32_t.

¿La comparación de las constantes _MAX y _MIN es la única y más simple?

+0

¿Qué pasa con 'sprintf ("% i ", ...)'? ¿No maneja de forma automática los sistemas de 32/64 bits? – Polynomial

+0

Polinomio, el problema es que% i no corresponde a int32_t. De todos modos, la respuesta correcta está abajo. –

Respuesta

10

Utilice sscanf con una de las macros especificadoras de formato de <inttypes.h>, p. Ej. SCNd32 o SCNi32:

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

Estos están disponibles desde C99.

+1

¡Gracias! No sabía sobre eso. Puede encontrar una lista en http://www.dinkumware.com/manuals/?manual=compleat&page=inttypes.html#SCNd8. – glglgl

+0

+1 Voy a borrar mi publicación ahora :) – INS

+0

¡Muchas gracias! –

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. 
} 
...