Convertir una cadena char* a un valor int, float o double en C/C++

Nota: Para ver el método opuesto de cómo pasar un valor int, float o double a una cadena, puedes ver mi otro artículo: Pasar un valor int, float o double a una cadena char* en C/C++.

En este artículo aprenderás a convertir un número almacenado en una cadena del tipo char* o char[] a una variable del tipo int, float o double en los lenguajes de C y C++. Aquí explicaré diferentes métodos por los que se puede lograr esta conversión.

Función atoi() para números enteros

La función atoi() sirve para pasar un número almacenado en una cadena (adentro de un char* o char[]) a una variable del tipo int. Dicho esto, la cadena debe contener un número entero, sin decimales, para que la conversión sea exacta. Esta función está definida en la biblioteca <stdlib.h>.

Ejemplo:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   const char *cadena = "123";
   int valor_convertido = atoi(cadena);
   printf("Valor convertido: %i\n", valor_convertido);
   return 0;
}

Resultado:

Valor convertido: 123

Función atof() para números decimales

La función atof() sirve para convertir un número decimal almacenado en una cadena, a una variable del tipo float o double. Esta función también está definida en la biblioteca <stdlib.h>.

Ejemplo:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   const char *cadena = "3.1416";
   float valor_convertido = atof(cadena);
   printf("Valor convertido: %f\n", valor_convertido);
   return 0;
}

Resultado:

Valor convertido: 3.141600

Función sscanf() para números enteros y decimales

La función sscanf() se puede usar para obtener diferentes tipos de datos a partir de una cadena char* o char[]. Entre ellos podemos obtener valores int, float, double para después almacenarlos en variables de estos tipos.

Ejemplo:

#include <stdio.h>

int main(void)
{
   const char *cadena_entero = "123";
   const char *cadena_decimal = "3.1416";

   int valor_entero;
   float valor_decimal;

   // Convertimos el valor entero a "int"
   sscanf(cadena_entero, "%i", &valor_entero);

   // Convertimos el valor decimal a "float"
   sscanf(cadena_decimal, "%f", &valor_decimal);

   // Se imprimen los valores
   printf("Valor entero: %i\n", valor_entero);
   printf("Valor decimal: %f\n", valor_decimal);

   return 0;
}

Resultado:

Valor entero: 123
Valor decimal: 3.1416

Lo bueno de usar la función sscanf() es que ya no tenemos que incluir la biblioteca de <stdlib.h>, dado que esta función ya está definida en <stdio.h>.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *