Cómo convertir Char Array a Int en C++

Jinku Hu 12 octubre 2023
  1. Usa la función std::strtol para convertir un array de caracteres en un int
  2. Usa la función sscanf() para convertir un array de caracteres en un Int
Cómo convertir Char Array a Int en C++

Este artículo introducirá métodos de C++ para convertir un array char en un tipo int.

Usa la función std::strtol para convertir un array de caracteres en un int

El método strtol interpreta los primeros caracteres válidos del array char a un tipo entero. La función toma la base numérica del entero convertido como un tercer parámetro, con un valor de - {0,2,3,…,36} rango. El segundo parámetro es de tipo char **endptr, que es opcional, y si se pasa almacena la dirección apuntada al carácter más allá del último carácter interpretado.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");

  auto str1_n = std::strtol(str1.data(), nullptr, 10);
  printf("%ld", str1_n);

  return EXIT_SUCCESS;
}

Resultado:

23323

El siguiente ejemplo demuestra la función strtol con el segundo parámetro siendo non-nullptr. Fíjate que estamos usando la función printf sólo como una herramienta de verificación de tipos, y deberías usar cout en cualquier otro caso. También es importante implementar rutinas de manejo de errores para los detalles de strtol que pueden verse aquí.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");
  char *char_part = nullptr;

  auto str1_n = std::strtol(str1.data(), &char_part, 10);
  printf("%ld\n", str1_n);
  printf("%s\n", char_part);
  ;

  return EXIT_SUCCESS;
}

Resultado:

23323
experimental_string

Usa la función sscanf() para convertir un array de caracteres en un Int

La función sscanf lee la entrada del buffer de cadenas de caracteres y la interpreta según el especificador de formato, que se pasa como segundo parámetro. El valor numérico se almacena en el puntero de la variable int. Los especificadores de formato se detallan ampliamente en el manual sscanf página:

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");

  int str1_n;
  sscanf(str1.data(), "%d", &str1_n);
  printf("%d\n", str1_n);

  return EXIT_SUCCESS;
}

Resultado:

23323

También podemos reimplantar el ejemplo anterior para almacenar la parte no numérica de la cadena de entrada. En este caso, añadimos el especificador de formato %s al segundo argumento y le pasamos el puntero char de destino como cuarto argumento. Fíjate que sscanf es una función variádica ya que puede tomar un número variable de argumentos de un llamador.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");

  int str1_n3;
  string str2{};
  sscanf(str1.data(), "%d%s", &str1_n3, str2.data());
  printf("%d\n", str1_n3);
  printf("%s\n", str2.data());

  return EXIT_SUCCESS;
}

Resultado:

23323
experimental_string
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Char