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

Jinku Hu 12 octubre 2023
  1. Usando la función std::sprintf para convertir int a char*
  2. Combinando los métodos to_string() y c_str() para convertir int a char*
  3. Utilizando los métodos de clase std::stringstream para la conversión
  4. Usando la función std::to_chars para convertir int a char*
Cómo convertir la Int a Char Array en C++

Este artículo explicará cómo convertir int en un char array (char*) usando diferentes métodos.

En los siguientes ejemplos, asumimos que almacenamos la salida de la conversión en el buffer de la memoria, y para propósitos de verificación, vamos a dar el resultado con std::printf.

Usando la función std::sprintf para convertir int a char*

Primero, tenemos que asignar espacio para almacenar una sola variable int que vamos a convertir en un buffer char. Note que el siguiente ejemplo está definiendo la longitud máxima MAX_DIGITS para los datos enteros. Para calcular la longitud del buffer char, añadimos sizeof(char) porque la función sprintf escribe una cadena de caracteres que termina en un byte \0 automáticamente en el destino. Por lo tanto, deberíamos tener en cuenta la asignación de suficiente espacio para este buffer.

#include <iostream>

#define MAX_DIGITS 10

int main() {
  int number = 1234;
  char num_char[MAX_DIGITS + sizeof(char)];

  std::sprintf(num_char, "%d", number);
  std::printf("num_char: %s \n", num_char);

  return 0;
}

Resultado:

num_char : 1234

Ten en cuenta que llamar a sprintf con buffers de origen y destino superpuestos (por ejemplo, sprintf(buf, "%s some text to add", buf)) no es recomendable ya que tiene un comportamiento indefinido y producirá resultados incorrectos dependiendo del compilador.

Combinando los métodos to_string() y c_str() para convertir int a char*

Esta versión utiliza métodos de clase std::string para hacer la conversión, lo que la convierte en una versión mucho más segura que tratar con sprintf como se muestra en el ejemplo anterior.

#include <iostream>

int main() {
  int number = 1234;

  std::string tmp = std::to_string(number);
  char const *num_char = tmp.c_str();

  printf("num_char: %s \n", num_char);

  return 0;
}

Utilizando los métodos de clase std::stringstream para la conversión

Este método se implementa usando la clase std::stringstream. Es decir, creamos un flujo temporal basado en cadenas donde se almacenan los datos int, luego devolvemos el objeto cadena por el método str y finalmente llamamos a c_str para hacer la conversión.

#include <iostream>
#include <sstream>

int main() {
  int number = 1234;

  std::stringstream tmp;
  tmp << number;

  char const *num_char = tmp.str().c_str();
  printf("num_char: %s \n", num_char);
  ;

  return 0;
}

Usando la función std::to_chars para convertir int a char*

Esta versión es una función de puro estilo C++ añadida en C++17 y definida en la cabecera <charconv>. En el lado positivo, este método ofrece operaciones en rangos, lo que podría ser la solución más flexible en escenarios específicos.

#include <charconv>
#include <iostream>

#define MAX_DIGITS 10

int main() {
  int number = 1234;
  char num_char[MAX_DIGITS + sizeof(char)];

  std::to_chars(num_char, num_char + MAX_DIGITS, number);
  std::printf("num_char: %s \n", num_char);

  return 0;
}
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++ Integer

Artículo relacionado - C++ Char